当我希望精确匹配的排名高于“部分”匹配时,应使用哪些分析器进行索引和搜索?可能会在一个中设置自定义评分Similarity
class?
例如,当我的索引包含car parts
, car
, and car shop
(索引为StandardAnalyzer
在 lucene 3.5 上),查询"car"
结果是:
(基本上按照添加的顺序返回,因为它们都获得相同的分数)。
我想看到的是car
排名第一,然后是其他结果(哪个顺序并不重要,我认为分析器可以影响它)。
三场比赛全部是exact(匹配术语“car”,而不是“ca”或“ar”):)
如果这些字段(“汽车零件”、“汽车”和“汽车商店”)中没有更多内容,那么您可以使用lengthNorm()
or computeNorm()
(取决于 Lucene 版本),给予较短的字段更多的权重,以便汽车因较短而获得更高的分数。在 Lucene 3.3.0 中,DefaultSimilarity.computeNorm() 如下所示:
return state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)));
where numTerms
是该字段中的术语总数。因此,令人惊讶的是“car”和“car shop”文档具有相同的分数,因为对于“car”,范数是 1,而对于“car shop”,范数应该是 0.7(假设 boost 为 1)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)