【问题标题】:How can Lucene's scoring depend on relative position of query?Lucene 的评分如何取决于查询的相对位置?
【发布时间】:2013-08-15 07:01:59
【问题描述】:

我使用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

【问题讨论】:

    标签: java search lucene


    【解决方案1】:

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

    评分在很大程度上取决于文档的索引方式,因此它 理解索引很重要(参见 Apache Lucene - Getting 开始指南和 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

    【讨论】:

    • 感谢您的回复。恐怕我没有说清楚。我的意思是在我之前所说的情况下,两种情况的分数是相同的。我只是想知道如何根据相对位置做出最终得分。分析器处理输入后,感染我们在两种情况下的索引中得到相同的结构。
    • 所以,你需要看看存储位置的分析器。我会更新答案
    • 我认为termVector主要是为了高亮。如上所述,我找到了更好的解决方案。谢谢。
    【解决方案2】:

    词组匹配的分数贡献取决于距离:

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

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

    更多详情请查看org.apache.lucene.search.SloppyPhraseScorer类的源代码。

    【讨论】:

    • 我发现这会有所帮助:PhraseQuery phraseQuery = new PhraseQuery();短语查询.setSlop(3);
    猜你喜欢
    • 2015-01-19
    • 2021-09-15
    • 2012-02-19
    • 2019-04-15
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2011-07-22
    • 2014-06-23
    相关资源
    最近更新 更多