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

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

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

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

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

非常感谢!

【问题讨论】:

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

标签: java search lucene indexing


【解决方案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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      相关资源
      最近更新 更多