在Lucene.net中排序Topscorecollector结果?

时间:2011-06-03 10:10:18

标签: lucene.net

我正在使用lucene进行搜索操作,我使用topscorecollector获取结果,但我发现它无法对topscorecollector结果进行排序。我觉得这很安静。我们可以对TopscoreCollector结果进行排序吗?

我的代码看起来像这样

        TopScoreDocCollector collector = TopScoreDocCollector.create(100, true);
        indexSearch.Search(andSearchQuery, filter, collector);
        ScoreDoc[] hits = collector.TopDocs().scoreDocs;
        for (int i = 0; i < hits.Length; i++)
        {
            int docId = hits[i].doc;
            float score = hits[i].score;
            Lucene.Net.Documents.Document doc = indexSearch.Doc(docId);
            document.Add(doc);
        }

有人能帮助我吗?

还有一个疑问  我们可以像这样对搜索结果进行排序

Hits hits = IndexSearch.search(searchQuery, filter, sort);

但它表明,Hits成为Lucene 3.0的迷恋。所以我选择了TopscoreCollector。但现在我非常困惑?

如果Hits的另一种替代方法,请将它传递给我......

1 个答案:

答案 0 :(得分:1)

TopScoreDocCollector将返回按分数排序的结果。要在字段上对结果进行排序,您需要使用返回TopFieldDocs的方法重载。

IE:IndexSearcher.Search(query, filter, nResults, sort)

如果您不想限制结果数,请使用nResults参数的非常大的值。如果我记得正确传递Int32.MAX_VALUE会使Lucene在初始化PriorityQueue时生成异常,但Int32.MAX_VALUE-1没问题。