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

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

例如,当我的索引包含car partscarcar shop (使用lucene 3.5上的StandardAnalyzer索引)时,对"car"的查询会导致:

  • 汽车零件
  • 汽车
  • 汽车店

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

我想看到的是car排名第一,然后是其他结果(真正重要的是哪个顺序,我认为分析仪可以影响那个)。

所有三场比赛都是精确的 (赛车匹配,而不是’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)。

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