我正在使用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的另一种替代方法,请将它传递给我......
答案 0 :(得分:1)
TopScoreDocCollector
将返回按分数排序的结果。要在字段上对结果进行排序,您需要使用返回TopFieldDocs
的方法重载。
IE:IndexSearcher.Search(query, filter, nResults, sort)
如果您不想限制结果数,请使用nResults
参数的非常大的值。如果我记得正确传递Int32.MAX_VALUE
会使Lucene在初始化PriorityQueue
时生成异常,但Int32.MAX_VALUE-1
没问题。