【问题标题】:Document score effecting the sort order of results, Lucene影响结果排序顺序的文档分数,Lucene
【发布时间】:2011-01-20 15:56:43
【问题描述】:

即使在通过排序字段之后,文档的分数也会影响搜索结果的排序顺序。有没有办法让lucene在传递特定排序字段时忽略文档分数?

例如:

DocId    Score        SortFieldA        SortFieldB
  1      23.0041      200906030800      Test
  2      32.2774      200906020800      Test
  3      21.0632      200906030800      Apple

我希望结果先由 SortFieldA 排序,然后再由 SortFieldB 排序。因此,在上述情况下,结果应该以 doc2、doc3 和 doc1 的形式返回。但是因为Score,排序顺序会被打乱。

我注意到,如果文档具有相同的分数,则结果会得到正确排序。

设置排序字段的代码:

public override Sort GetSort()
    {
      List<SortField> sortFields = new List<SortField>();      
      sortFields.Add(new SortField(StartDateTime.ToString(), SortField.STRING, ReverseSort));
      sortFields.Add(new SortField(TitleSort.ToString(), SortField.STRING, ReverseSort));
      return new Sort(sortFields.ToArray());
    }

【问题讨论】:

  • 我用一个例子更新了帖子。谢谢。
  • 尝试选择您的代码并使用编辑框上方的代码按钮来更好地格式化代码。或者,您可以在每行代码前放置四个空格。

标签: sorting lucene lucene.net


【解决方案1】:

编辑:由于您不关心原始分数,我相信您需要先使用ConstantScoreQuery 来获取命中,然后将它们传递给排序器。

尝试查看this question。

【讨论】:

  • 我将 sortobject 传递给重载的搜索方法,并且索引没有问题。在正常情况下,排序工作完美。只有在排序分数不同的文档的情况下,才能正确使用 SortField。它尝试对结果进行排序,但排序分数高的结果会放错地方。
猜你喜欢
  • 2019-09-14
  • 1970-01-01
  • 2014-12-19
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-15
相关资源
最近更新 更多