【问题标题】:Sorting boost results in lucene在 lucene 中排序提升结果
【发布时间】:2013-03-25 15:34:44
【问题描述】:

我一直在寻找类似的问题,但似乎没有任何帮助。

我想对我的查询结果进行排序,但要保持提升顺序。

例如,我创建了一个orQuery,其中有 3 个查询,其中包含 Occur.SHOULD,并提升了 2.0、1.0 和 0.2。然后,当我进行排序时,我希望 boost 2.0 的结果保持在顶部但已排序,然后 boost 1.0 的结果也已排序,最后最后一个查询 (0.2) 的结果也已排序。

您可以将结果想象为三组排序结果。

有什么可以用的吗???

【问题讨论】:

标签: java lucene


【解决方案1】:

don't think you can do this 开箱即用。您可以实现自己的Collector,但单独运行三个搜索然后合并结果会容易得多。

【讨论】:

    【解决方案2】:

    我看到了几种解决方法:

    1 - 让提升的差异变得巨大。

    如果您在查询中应用的提升因素足够大,它们应该会覆盖所有其他影响分数的因素。因此,除了 0.2、1.0 和 2.0,您可以尝试 0.000001、1.0 和 1000000 来尝试一些东西。尝试一下,直到你得到可用的东西。然后,按照相关性排序 (Sort.RELEVANCE),这是默认设置,然后您不仅可以得到您想要的排序,还可以在这些子组中维护所有其他有用的评分方面。

    2 - 实际上通过查询提升应用排序

    这是您需要严格按照提升因子排序的选项,其次是单个查询中的其他排序参数。

    Lucene 的 Sort 不能让您直接了解应用于某个术语的提升因子(出于充分的理由,想要做这件事有点奇怪。提升是为了影响分数,而不是成为分数)。它为您提供的最接近的是按相关性排序,这当然会影响很多其他因素。

    如果您需要获取原始提升因子,则需要覆盖 Similarity

    需要考虑三个提升:

    • 查询提升:作为查询的一部分应用,这将被传递到Similarity.computeWeight
    • 字段和文档提升:在索引时应用、组合并存储在索引中,同时结合“长度规范”因子。

    您似乎有兴趣获得的唯一提升是查询级别提升,这应该是最容易处理的。您可以修改TFIDFSimilarity,或者从头开始创建[Similarity] 的子类。无论哪种方式,您都希望删除大部分逻辑,只返回查询提升。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 2011-01-20
      相关资源
      最近更新 更多