java - 使用 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);
}
上面的方法只是给了我结果,但为此我必须搜索整个单词,但如果我搜索部分单词,它就不起作用。
解决方案
默认情况下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(在类列表下方)。
推荐阅读
- terraform - 未找到 Terraform- 提供程序配置
- jekyll - Jekyll Liquid 语法,如何取消引用属性
- docker - 在 S6 Overlay 中终止具有 1 个进程的 Docker 容器需要 > 10 秒
- vega-lite - 在 vega-lite 饼图中按大小排序的弧
- python-3.x - Paramiko exec_command 不能与 mkfs 一起使用?
- c# - 有没有办法在 ASP.NET Web API 应用程序中全局限制并行任务的数量?
- shopify - 如何在产品概览中仅显示可用的产品多属性价格
- javascript - NextJS useRouter 在函数体内使用时出错
- reactjs - 来自 API 调用的数据未按要求进入控制台
- mysql - MySQL:仅当该客户同时拥有储蓄账户和支票账户时才尝试查询客户信息