我已经看过其他Lucene得分问题了,但似乎没有一个能解决我的问题。
我正在索引一些大型的Word文件。这些文件中的行被拆分,文件中的每10行被制作成Lucene Document
(实际上它们是重叠的10行Documents
,但这不相关)。
当我搜索“泡泡绽放”时,例如...我发现,令我轻微的惊讶,如果这些单词中的一个在给定的Document
中出现两次,那么它几乎就像“发现两者一样好”在同一个Document
中搜索术语单词(即“bubble”和“bloom”)。
此外,在包含1 x“气泡”和1 x“绽放”的Document
之前,将列出包含3个“气泡”实例的Document
(10行组)。一个带有2个“气泡”的人似乎被认为与两个单词的Document
相等。
NBa qazxsw poi喜欢这个,“泡泡绽放”似乎将成为一个qazxsw poi,其中有两个条款由String
。
是否有任何方法可以调整事物,以便在BooleanQuery
中找到两个单词(搜索项)的事实将这个QueryParser.parse()
排在高于找到其中一个单词的2或3个实例,但是另一个单词为0?
PS顺便说一下,我只是搜索字符串是“+ bubble + bloom”的搜索...显然这排除了任何缺少一个单词的Document
。但我认为这是一种解决方法。我希望默认功能没有“+”(对于“require”)来评分所有术语存在的事实。
很明显,TF-IDF或BM25评分非常依赖于索引中术语的分布,因为例如我能够使包含“bubble bloom”的文档高于任何文档,但是这最有可能是我的测试分发
有不同的方法以标准方式实现这一目标。最简单的方法之一是使用ConstantScoreQuery,它总是会为该术语的一个或多个匹配项提供1.0(或任何其他任意数字)的分数。结合使用的BooleanQuery,您可以轻松地根据文档中的术语数得到文档。
EG
Document
这仍然是OR查询,因此您可以与其中任何一个匹配。这个问题的明显问题是气泡或花朵的匹配是相等的。这可能也有一些警告。
完整代码的链接是Document