2010-02-24 244 views
3

即使在传递分类字段之后,文档分数也会影响搜索结果的排序顺序。有没有办法让lucene在特定的排序字段被传递时忽略文档分数?影响结果排序顺序的文档分数,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的形式返回。但由于得分,排序顺序受到干扰。

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

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()); 
    } 
+0

你能发表一些代码吗? – bajafresh4life 2010-02-25 14:19:57

+0

我用一个例子更新了这篇文章。谢谢。 – 2010-02-25 14:32:38

+0

尝试选择您的代码并使用编辑框上方的代码按钮更好地设置代码格式。或者,您可以在每行代码前放四个空格。 – 2010-02-27 00:59:21

回答

0

编辑:用于设置排序字段

代码,你不喜欢原来的成绩,我相信你需要使用一个ConstantScoreQuery首先得到命中,然后将它们传递给分拣机。

试试看this question

+0

我将sortobject传递给重载搜索方法,索引没有问题。在正常情况下排序完美。只有在排序分数不同的文档的情况下,才能正确使用SortField。它试图对结果进行排序,高排序得分的结果被错误放置。 – 2010-02-25 15:50:09