lucene 在Lucence中是否可以进行2个字符的搜索

agxfikkp  于 2022-11-07  发布在  Lucene
关注(0)|答案(2)|浏览(162)

你好,我有一个关于lucence搜索的问题,是否可以使用lucence搜索从文件中搜索2个字符
例如,如果有像“karthik测试”这样的名称,是否可以在lucence中搜索“ka”或“te”。如果是这样,请提供一个代码块。

6qqygrtg

6qqygrtg1#

是的,可以使用通配符。
QueryParser输入te*,它将生成一个以te前缀开头并带有任何后缀的查询。

yfwxisqw

yfwxisqw2#

也许这对你有帮助

private List search(String word, IndexSearcher searcher, Date fromDate, Date toDate, int skip, int noOfRecords) throws Exception {
        StandardAnalyzer analyzer = new StandardAnalyzer();
        BooleanQuery.Builder finalQuery = new BooleanQuery.Builder();
        List results = null;

        for(String key : keyUtil.getAllKeys()) {
            if((!key.contains("Date") || !key.contains("Time"))) {
                QueryParser queryParser = new QueryParser(key, analyzer);

                Query query = queryParser.parse(word);
                finalQuery.add(query, Occur.SHOULD);
            }
        }

        if(fromDate != null && toDate != null) {
            Query query = NumericDocValuesField.newSlowRangeQuery("StartDate", fromDate.getTime(), toDate.getTime());
            finalQuery.add(query, Occur.MUST);
        }

        TopDocs hits = searcher.search(finalQuery.build(), skip + noOfRecords);
        results = new ArrayList();
        if(hits.totalHits.value > 0) {
            int count = 0;
            for (ScoreDoc sd : hits.scoreDocs) {
                if(count >= skip) {
                    Document d = searcher.doc(sd.doc);
                    results.add(d.get("storePath"));
                }
                count ++;
            }
        }

        analyzer.close();
        return results;
    }

您可以始终将RegEx模式与属性“word”一起使用。


* someWord *

相关问题