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 时,如果您有某些受限类型的查询,例如仅由TermQuery
s 组成的BooleanQuery
,则为it may be possible to compare results across queries if you disable the coord boost in the BooleanQuery constructor。
【讨论】:
【参考方案2】:如果您想比较两个或多个查询,我找到了一种解决方法。您可以使用 LevenstheinDistance 或 LuceneLevenstheinDistance(Damerau) 类将得分最高的文档与查询词进行比较,以获得查询词和结果之间的距离。
结果是它们之间的相似性。对要比较的每个查询执行此操作。现在您有了一个工具,可以使用查询词的相似性和最高结果来比较您的查询。您现在可以选择相似度最高的查询,并将其用于下一步正确的操作。
//Damerau LevenstheinDistance
LuceneLevenshteinDistance d = new LuceneLevenshteinDistance();
similiarity = d.getDistance(queryterm, yourResult );
【讨论】:
以上是关于Lucene:跨查询比较结果的主要内容,如果未能解决你的问题,请参考以下文章
Lucene 查询结果对于 long 和 double 值不正确
Neo4j,在返回可分页结果的同时查询多个 lucene 索引