如何使用Apache Lucene获得最佳得分搜索?
1. State Authority
2. Authority State
现在用户搜索"权威状态"或者"国家管理局",我们以上述方式获得相同的结果。但对于"权威国家"搜索结果应为
1. Authority State
2. State Authority
以下是字段上的lucene查询:
name:Authority State*
name:Authority State
name:Authority*
name:State*
for (String field : INDEXED_FIELDS) {
bool.should(qb.keyword().wildcard().onField(field).matching(userInputBuilder.toString()).createQuery());
}
for (String field : INDEXED_FIELDS) {
for (String match : pattern) {
bool.should(qb.keyword().onField(field).matching(match).createQuery());
}
}
结果没有排序。
有人可以建议如何获得准确的结果吗?
答案 0 :(得分:0)
关键字查询类型只是为了匹配输入的相同标记,而不考虑订单。
如果您需要它来考虑短语中令牌的顺序,请使用短语查询:
Query query = queryBuilder
.phrase()
.withSlop( 2 )//or other options of the Phrase query
.onField( field )
.sentence( userInputBuilder.toString() )
.createQuery();
您可能还有兴趣尝试最新的"Simple Query Builder"。
如果您对"调试"感兴趣分数,你可以让查询引擎输出不仅仅是结果,还有每个命中使用的分数值和评估公式:
List<Object[]> results = (List<Object[]>) fullTextSession
.createFullTextQuery( mltQuery, Coffee.class )
.setProjection( ProjectionConstants.THIS, ProjectionConstants.SCORE, ProjectionConstants.EXPLANATION )
.list();
对于每次点击,这将为您提供三个元素的数组: