【问题标题】:Sorting Topscorecollector Results in Lucene.net?在 Lucene.net 中对 Topscorecollector 结果进行排序?
【发布时间】:2011-06-03 10:10:18
【问题描述】:

我正在使用 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 替代方法,请将其传递给我...

【问题讨论】:

    标签: lucene.net


    【解决方案1】:

    TopScoreDocCollector 将返回按分数排序的结果。要获得按字段排序的结果,您需要使用返回 TopFieldDocs 的方法重载。

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

    如果您不想限制结果的数量,请为nResults 参数使用一个非常大的值。如果我记得正确传递Int32.MAX_VALUE 将使Lucene 在初始化其PriorityQueue 时生成异常,但Int32.MAX_VALUE-1 很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      相关资源
      最近更新 更多