Lucene:跨查询比较结果

Posted

技术标签:

【中文标题】Lucene:跨查询比较结果【英文标题】:Lucene: compare results across queries 【发布时间】:2011-10-11 22:50:12 【问题描述】:

我需要比较不同 Lucene 查询中搜索结果的相关性。

实际上,我有一组已编入索引的文本文档,当在该集合上完成搜索时,我想返回的不是该集合中的 N 个最佳结果,而是所有符合“足够好”查询的结果。

这个“足够好”的参数是可配置的(比如在 0(文档绝对不相关)和 1(文档是可能的最佳匹配)之间),但我希望它以相同的方式影响所有查询。

根据我在互联网上的发现,这不是一项简单的任务。谁能给我一个关于如何解决这个问题的提示?

非常感谢!

【问题讨论】:

不确定您的意思?是否要限制查询结果?使用 Solr 很容易做到这一点。使用 Lucene 你需要编写一个自定义收集器:看这里***.com/questions/2871558/… 感谢 Mikos,但正如 Shashikant Kore 的评论中所写的那样,分数与查询相关,因此我不能使用相同的阈值来衡量多个查询中结果的“好坏”。我正在研究以某种方式标准化分数的方法,以便这些标准化值在所有查询的“好”方面意味着相同。 啊!我想我更好地理解你的问题,但觉得这比 Lucene 本身更适合统计。您可能希望在统计数据中查找 ANOVA 或卡方检验,同时可能会帮助您使用结果文档分数数组确定跨查询的拟合优度。 HTH。 【参考方案1】:

我只是在寻找同样问题的答案。这是我环顾四周时发现的:

在in general it is not possible to compare across queries 时,如果您有某些受限类型的查询,例如仅由TermQuerys 组成的BooleanQuery,则为it may be possible to compare results across queries if you disable the coord boost in the BooleanQuery constructor。

【讨论】:

【参考方案2】:

如果您想比较两个或多个查询,我找到了一种解决方法。您可以使用 LevenstheinDistanceLuceneLevenstheinDistance(Damerau) 类将得分最高的文档与查询词进行比较,以获得查询词和结果之间的距离。

结果是它们之间的相似性。对要比较的每个查询执行此操作。现在您有了一个工具,可以使用查询词的相似性和最高结果来比较您的查询。您现在可以选择相似度最高的查询,并将其用于下一步正确的操作。

//Damerau LevenstheinDistance
LuceneLevenshteinDistance d = new LuceneLevenshteinDistance();

similiarity = d.getDistance(queryterm, yourResult );

【讨论】:

以上是关于Lucene:跨查询比较结果的主要内容,如果未能解决你的问题,请参考以下文章

Lucene 查询结果对于 long 和 double 值不正确

Neo4j,在返回可分页结果的同时查询多个 lucene 索引

在Alfresco的Lucene查询搜索给出了奇怪的结果

Solr/Lucene使用docValue查询的一个坑

Solr/Lucene 有没有办法返回所选文档的排名而不是完整结果?

如何查找结果是否在lucene索引中的2个日期之间下降?