2011-07-24 128 views
6

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

其实我有一套索引的文本文档,当对这个集合进行搜索时,我想从这个集合中返回N个最好的结果,但是所有符合查询的结果“足够好”。这个“足够好”的参数是可配置的(比如0(文档是绝对不相关的)和1(文档是最好的匹配)),但我希望它以同样的方式影响所有查询。

从我在互联网上发现它不是一个简单的任务。有人可以给我一个关于如何解决这个问题的提示吗?

非常感谢!

+0

不确定你的意思?你想限制查询结果吗?用Solr很容易做到这一点。用Lucene你需要编写一个自定义收集器:看看这里http://stackoverflow.com/questions/2871558/remove-results-below-a-certain-score-threshold-in-solr-lucene – Mikos

+0

感谢Mikos,但是因为它写在Shashikant Kore的评论中,评分与查询有关,因此我不能使用相同的阈值来衡量跨多个查询的结果“好”。我正在研究以某种方式规范化分数的方式,以便这些规范化的值对于所有查询的“善良”而言意味着相同。 – Serpenty

+0

啊!我想我能更好地理解你的问题,但觉得这比Lucene本身更适合统计。您可能希望在统计中查找方差分析或卡方检验,同时可以帮助您使用结果文档分数阵列确定跨查询的适合度。 HTH。 – Mikos

回答

0

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

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

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

similiarity = d.getDistance(queryterm, yourResult); 
+0

@piyushj谢谢你纠正我btw :) – Blackeye