什么是最精确的匹配排名最好的lucene设置

时间:2012-01-09 09:36:59

标签: java lucene analyzer

当我希望精确匹配排名高于"部分"时,应该使用哪些分析器进行索引和搜索。比赛?可能在Similarity班级设置自定义评分?

例如,当我的索引包含car partscarcar shop(在lucene 3.5上使用StandardAnalyzer索引)时,"car"的查询结果:

  • 汽车零件
  • 汽车商店

(基本上按照添加顺序返回,因为它们都得到相同的分数。)

我希望看到的是car排名第一,然后是其他结果(对于哪个顺序并不重要,我认为分析师可以对此产生影响)。

2 个答案:

答案 0 :(得分:2)

所有三场比赛都是完全(赛车匹配,而不是'ca'或'ar'):)

如果这些字段中没有更多内容(“汽车部件”,“汽车”和“汽车商店”),那么您可以使用lengthNorm()computeNorm()(取决于Lucene版本),给较短的场地更多的重量,以便汽车得到更高的得分,因为更短。在Lucene 3.3.0中,DefaultSimilarity.computeNorm()看起来像这样:

return state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)));

其中numTerms是字段中的术语总数。因此,令人惊讶的“汽车”和“汽车商店”文件具有相同的分数,因为“汽车”的标准是1,而“汽车商店”它应该是0.7(假设增加1)。

答案 1 :(得分:0)

快速入侵:从ScoreDoc[]获取IndexSearcher.search后,将score重新排序为第一个标准,将长度(升序)重新排序为第二个标准。