Java Lucene:基于相关性的搜索和检索

Java Lucene:基于相关性的搜索和检索,java,lucene,Java,Lucene,我正在使用lucene进行索引和搜索。下面是我用于搜索的代码。但在当前代码中,结果是经过排序的。但我希望结果以相关性为基础。假设我搜索像“abc”这样的词,我希望我的搜索得到匹配“abc”的结果,然后是“abc”或“bc”,最后是“a”、“b”、“c”,但目前结果是排序的 当我们搜索多个单词时,有人能建议我如何根据相关性检索结果吗。感谢您的帮助。默认情况下,Lucene仅基于文本相关性进行排序。有相当多的因素有助于相关性得分 tf idf值和长度标准化可能会影响您的分数,导致“a b”/“b c

我正在使用lucene进行索引和搜索。下面是我用于搜索的代码。但在当前代码中,结果是经过排序的。但我希望结果以相关性为基础。假设我搜索像“abc”这样的词,我希望我的搜索得到匹配“abc”的结果,然后是“abc”或“bc”,最后是“a”、“b”、“c”,但目前结果是排序的


当我们搜索多个单词时,有人能建议我如何根据相关性检索结果吗。感谢您的帮助。

默认情况下,Lucene仅基于文本相关性进行排序。有相当多的因素有助于相关性得分

tf idf值和长度标准化可能会影响您的分数,导致“a b”/“b c”文档显示在排名靠前的结果中,而不是包含“a b c”的文档

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

1) 编写一个自定义的相似性类,扩展自。如果你想知道什么是相似性,那就是Lucene使用的类,它包含了所有对分数有贡献的评分因子公式

教程:

2) 凌驾

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) coord的默认实现是overlap/maxoverlap。您可以尝试使用不同的公式,以便包含更多查询词的文档显示在顶部结果中。以下公式可能是很好的起点

   1) coord return value = Math.sqrt(overlap/maxoverlap)
   2) coord return value = overlap;
4) 您不必重写其他方法,因为DefaultSimilarity具有所有评分因子的默认实现。只需触摸一个你想要尝试的,在你的例子中是coord()。如果从扩展,则必须提供所有实现


5) 相似性可以通过

的可能重复项传递给IndexSearcher如果您看到重复的帖子,请单击“标记”按钮并将其标记为重复项,它将自动关闭。不需要删除帖子中的内容:)