繁体   English   中英

Lucene:根据相关性进行搜索和检索

[英]Lucene: Search and retrieve based on relevance

我正在使用lucene进行索引和搜索。 以下是我用于搜索的代码。 但是在当前代码中,对结果进行了排序。 但我希望结果基于相关性。 假设如果我搜索“ abc”之类的词,我希望搜索结果匹配“ abc”,然后匹配“ ab”或“ bc”,最后匹配“ a”,“ b”,“ c”,但当前结果被排序。

当我们对多个单词进行搜索时,有人可以建议我如何根据相关性检索结果。 谢谢你的帮助。

默认情况下,Lucene仅基于TEXT-RELEVANCE进行排序。 有很多因素会影响相关性得分。

tf-idf值和长度规范化可能会影响您的分数,从而导致“ ab” /“ bc”文档比包含“ abc”的文档显示在排名靠前的结果上。

上面您可以克服的方法是根据匹配查询词的数量来提高相关性得分。 您可以按照以下步骤操作。

1)编写一个从DefaultSimilarity扩展的自定义相似类。 如果您想知道相似性是什么,Lucene使用的类包含有助于得分的所有评分因子公式。

教程: Lucene计分

2)覆盖DefaultSimilarity.coord()

Lucene文档中的coord()说明。

coord(q,d) is a score factor based on how many of the query terms are found in the specified document. Typically, a document that contains more of the query's terms will receive a higher score than another document with fewer query terms. This is a search time factor computed in coord(q,d) by the Similarity in effect at search time. 

3)坐标的默认实现是重叠/最大重叠。 您可以尝试使用不同的公式,以使包含更多查询词的文档出现在顶部结果中。 以下公式可能是一个很好的起点。

   1) coord return value = Math.sqrt(overlap/maxoverlap)
   2) coord return value = overlap;

4)您不必重写其他方法,因为DefaultSimilarity具有所有评分因子的默认实现。 只需触摸您要尝试的那个,在您的情况下就是coord()。 如果您从相似性扩展,则必须提供所有实现。

5)可以使用IndexSearcher.setSimilarity()将相似性传递给IndexSearcher

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM