首页 > 解决方案 > 使用 MultiFieldQueryParser 时如何在 Lucene 中搜索部分单词?

问题描述

 public SearchResult search(String queryStr, SortBy sortBy, int maxCount)
      throws ParseException, IOException {
    String[] fields = {Indexer.TITLE_FIELD_NAME, Indexer.REVIEW_FIELD_NAME, "name"};


    QueryParser parser = new MultiFieldQueryParser(fields, analyzer);
    Query query = parser.parse(queryStr);

    Sort sort = null;
    if (sortBy != null) {
        sort = sortBy.sort;
    }

    return searchAfter(null, query, sort, maxCount);
}

上面的方法只是给了我结果,但为此我必须搜索整个单词,但如果我搜索部分单词,它就不起作用。

标签: javalucene

解决方案


默认情况下MultiFieldQueryParser(和QueryParser,该类继承自)将查找您正在搜索的整个单词,但它也可以生成通配符查询。“大象”这个词可以通过使用elep*, elep?ant(即 ? mathes 单个字母)或. 来匹配ele*nt。您还可以使用模糊查询,例如elechant~.

您可以在此处阅读整个语法规范:http: //lucene.apache.org/core/7_5_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html(在类列表下方)。


推荐阅读