我需要比较不同Lucene查询中搜索结果的相关性。
实际上我有一组索引的文本文档,当在这个集合上进行搜索时,我想要返回的不是这个集合中的N个最佳结果,而是所有适合查询的结果“足够好”。
这个“足够好”的参数将是可配置的(例如0(文档绝对不相关)和1(文档是最佳匹配))但我希望它以相同的方式影响所有查询。
从我在互联网上找到的内容来看,这不是一项简单的任务。有人能给我一个关于如何处理这个问题的提示吗?
非常感谢!
答案 0 :(得分:1)
即使您将分数标准化为[0,1]区间,比较不同查询的分数显然也是不正确的,请参阅How to normalize Lucene scores?
答案 1 :(得分:0)
我只是在寻找同一个问题的答案。这是我在环顾四周时所发现的:
在in general it is not possible to compare across queries期间,如果您有某些受限制类型的查询,例如BooleanQuery
只包含TermQuery
,则it may be possible to compare results across queries if you disable the coord boost in the BooleanQuery constructor。
答案 2 :(得分:0)
如果您想比较两个或更多查询,我找到了一种解决方法。您可以使用 LevenstheinDistance 或 LuceneLevenstheinDistance(Damerau)类将您的最高得分文档与您的queryterm进行比较,以获得您的queryterm与结果之间的距离。
结果是它们之间的相似性。对要比较的每个查询执行此操作。现在,您可以使用queryterm的相似性和最高结果来比较查询。您现在可以选择具有最高相似度得分的查询,并将其用于下一步的正确操作。
//Damerau LevenstheinDistance
LuceneLevenshteinDistance d = new LuceneLevenshteinDistance();
similiarity = d.getDistance(queryterm, yourResult );