1

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

4

2 回答 2

0

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

  • 距离 = 0 的最高分(完全匹配)。
  • 随着距离越来越远,得分越来越低。

对于您的案例,查询“ab c”将与距离为 0 的文档“ab c”匹配。这将导致最高的短语得分。对于文档“ba c”距离将大于 0。因此分数会更少。

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

于 2013-08-21T08:44:21.950 回答
0

这取决于您使用哪种类型的查询。如果您搜索的短语按正确的顺序放置(例如 new york 或 york new),某些查询可能会获得更高的分数。根据 Lucene 文档,您可以使用对分数的解释来了解为什么 ABC 的分数高于 BA C。

评分很大程度上取决于文档的索引方式,因此了解索引很重要(在继续本节之前,请参阅 Apache Lucene - 入门指南和 Lucene 文件格式。)还假设读者知道如何使用Searcher.explain(Query query, 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 ,请查看存储术语的位置

于 2013-08-15T17:17:59.680 回答