2013-03-25 30 views
2

我一直在寻找一个类似的问题,但似乎没有任何帮助。在lucene中对提升结果进行排序

我想排序我的查询结果,但保持升压顺序。

例如,我制作了一个orQuery,其中3个查询在Occur.SHOULD之内,并且提升了2.0,1.0和0.2。然后,当我进行排序时,我希望boost 2.0的结果保留在顶部,但排序,然后boost 1.0的结果也排序,最后查询(0.2)的结果也排序。

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

有什么我可以使用???

+0

看看这个文档https://lucene.apache。组织/核心/ old_versioned_docs /版本/ 3_0_3/API /所有/组织/阿帕奇/ Lucene的/搜索/ Sort.html – 2013-03-25 15:40:46

回答

1

我看到一对夫妇的方式去了解这一点:

- 请在提升巨大的差异。

如果您在查询中应用的提升因素足够大,它们应该覆盖每个其他影响分数的因素。所以,而不是0.2,1.0和2.0,你可以尝试0.000001,1.0和1000000,以便尝试。试验一下,直到你得到可用的东西。然后,根据相关性(Sort.RELEVANCE)进行排序,因为它是默认值,然后您不仅可以得到您想要的排序,还可以在这些子组中保留所有其他有用的评分方面。

- 实际应用通过查询升压

排序这是你需要采取的提振因素严格排序的选项,其次,在一个单一的查询的一些其他类型的参数。

Lucene的Sort不给你施加的一个术语(有很好的理由增强因子的直接可见,这是一个有点古怪的事情要做。提升是为了影响分数,不是得分)。它最接近你的是按照相关性排序,这当然是其他许多事情的因素。

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

有三个提升要考虑:

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

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

相关问题