2012-01-09 44 views
4

哪些分析器应该用于索引和搜索当我想要一个精确匹配排名高于“部分”匹配?可能在Similarity课堂中设置自定义得分?什么是最好的lucene设置排名精确匹配作为最高

例如,当我的索引包括car partscar,并car shop(与StandardAnalyzer Lucene的3.5索引),用于"car"结果查询:

  • 汽车零件
  • 车shop

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

我想看到的是car排名第一,然后其他结果(并不重要,我假设分析仪可以影响这个顺序)。

回答

0

快速入门:在从IndexSearcher.search获得ScoreDoc[]之后,将其重新排序为score作为第一条准则和第二条长度(升序)。

+0

用'search(query,limit)'方法搜索时,可能会遗漏(可能)更好的匹配结果? – NoMoreMrCodeGuy 2012-01-09 09:45:50

+1

@NoMoreMrCodeGuy:是的,它可能。 – 2012-01-09 09:47:27

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)。

+0

Lucene 3.5在这里。可能是因为提到的分数是基于自定义相似类,试图获得更好的结果。尽管如此,仍然索引在StandardAnalyzer上,对此有何评论? – NoMoreMrCodeGuy 2012-01-09 14:12:42