我使用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
答案 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)
短语匹配的得分贡献取决于距离:
对于您的案例查询,“a b c”将与距离为0的文档“a b c”匹配。这将导致最高的词组得分。对于文档“b a c”,距离将大于0.因此得分会更低。
有关详细信息,请查看 org.apache.lucene.search.SloppyPhraseScorer 类的源代码。