2011-06-21 46 views
1

我正在使用Lucene.NET,它目前是Lucene 2.9的最新版本。我試圖實現一種獨特的選擇,但不需要深入到任何組。我知道Lucene 3.2有一個可以解決這個問題的多面搜索,但是我沒有時間把它移植到2.9。在Lucene.NET中過濾排序查詢的結果

在任何情況下,當您使用排序操作符執行分頁查詢時,Lucene必須找到與查詢匹配的所有文檔,對它們進行排序,然後獲取前N個結果,其中N是頁面大小。我想構建一些在排序後的查詢完成後也應用的東西,但是會獲取前N個唯一結果並返回它們。我正在考慮使用HashSet和其中一個索引字段來確定唯一性。我寧願找到一種在Lucene中擴展某些東西的方法,而不是因爲性能方面的原因返回結果後再做。

自定義過濾器似乎在應用主查詢之前運行,自定義收集器在應用排序之前運行,除非您按照Lucene的文檔ID進行排序。那麼解決這個問題的最佳方法是什麼?在擴展的正確組件的方向上的一個點將會爲您解答這個問題,一個示例實現將肯定會爲您提供答案。在此先感謝

+0

你所說的「獨一無二」的結果意味着? Lucene返回的文檔在索引中應該已經是唯一的 – mathieu

+0

基於主鍵/文檔ID以外的字段是唯一的。就像一個選擇不同的* ... SQL查詢 – LaserJesus

回答

0

我會做搜索不排序,並在自定義的收集,將收集的基礎上「唯一性」大小爲N的排序列表的結果

+0

這是Lucene中最有效的實現,是爲每個不同的文檔在內存列表中手動執行插入排序嗎?我可能需要插入數百萬項,然後才能對結果進行分頁以選擇最上面的N. – LaserJesus