Lucene的得分如何取决于查询的相对位置?

时间:2013-08-15 07:01:59

标签: java search lucene

我使用WhitespaceAnalyzer作为查询分析器。 如果我有2份文件:

| text | a b c |
| text | b a c |

text是一个字段。

现在索引结构是这样的:

|Term|  in document | 
| a  | a b c / b a c|
| b  | a b c / b a c|
| c  | a b c / b a c|

我有一个问题:

| text | a b c |

如何为a b c获得更高的分数,为b a c获得更低的分数。

Lucene是否支持根据相对位置计算得分?

我发现我发现这会有所帮助:

PhraseQuery phraseQuery = new PhraseQuery();
phraseQuery.setSlop(1);

通过这种方式,他们会得到不同的分数。

查看更多:http://www.blogjava.net/tangzurui/archive/2008/09/22/230357.html

And here I come across another question: https://stackoverflow.com/questions/18394532/how-can-lucenes-scoring-depend-on-terms-relative-position-in-the-document

2 个答案:

答案 0 :(得分:0)

这取决于您使用的查询类型。如果您搜索的短语按正确顺序排列(例如纽约或纽约新),则某些查询可能会得到更多分数。根据Lucene的文档,您可以使用得分解释,看看为什么A B C得分高于B A C.

  

评分在很大程度上取决于文档的索引方式,所以它   了解索引很重要(参见Apache Lucene - Getting   在继续之前,已启动指南和Lucene文件格式   本节。)还假设读者知道如何使用   Searcher.explain(查询查询,int doc)功能,可以去了   很长的路要知道为什么得分会被退回。

http://lucene.apache.org/core/3_6_2/scoring.html

UPD。如果您使用Lucene 3,请查看此术语的位置 http://lucene.apache.org/core/3_0_3/api/core/org/apache/lucene/document/Field.TermVector.html

答案 1 :(得分:0)

短语匹配的得分贡献取决于距离:

  • 距离的最高得分= 0(完全匹配)。
  • 得分随着距离的增加而降低。

对于您的案例查询,“a b c”将与距离为0的文档“a b c”匹配。这将导致最高的词组得分。对于文档“b a c”,距离将大于0.因此得分会更低。

有关详细信息,请查看 org.apache.lucene.search.SloppyPhraseScorer 类的源代码。