2011-11-27 73 views
1

我正在使用lucene.net生成索引並進行搜索。我實際上是通過Codeplex上的Examine項目間接使用API​​。我目前有一切正常工作和分頁邏輯,但是當前邏輯頁面搜索結果搜索完成後。我不喜歡這樣做,因爲這意味着搜索可能會返回數千條記錄,只有這樣我的代碼纔會獲取所需的10-20條記錄,並丟棄剩餘的這些資源。即使每個SearchResult項目只是一個小小的3KB,執行這些搜索的內存量也會隨着時間的推移而增長,併成爲一個巨大的內存。我的共享主機只保證1GB的專用內存,所以這是我的網站的一大問題。lucene.net使用查詢分頁?

所以問題是:我如何使用lucene查詢語言單獨地以頁面方式限制結果的結果?我看了一下lucene.net從中移植過來的apache lucene項目,而且我沒有看到任何可以讓我做我正在尋找的語法。基本上我想要相當於SQL服務器必須限制查詢語言級別的行。

E.g. (這就是我們會怎麼做分頁在SQL並且只返回20條記錄不是在where子句相匹配的所有記錄)

選擇*(選擇ROW_NUMBER()OVER(ORDER BY訂購日期)作爲RoNum, 訂單ID, 訂購日期 FROM SalesOrders的 WHERE OrderCustomerName像「戴維斯%」)O WHERE ROWNUM 1到20之間

+0

[Lucene .NET結果子集]的可能重複(http://stackoverflow.com/questions/1242333/lucene-net-result-subsets) –

回答

1

我不認爲有一個major waste of resources,因爲搜索(使它簡單)沒有什麼比計算更位向量&成績。什麼是昂貴的是從指數中讀取文檔。 (除了已棄用的Hits類別)搜索結果不會讀取文檔,而只是返回docid,因此跳過前N個結果沒有太多開銷。

這是一個例外,當你想根據某些字段排序結果。然後,必須從索引中讀取搜索結果列表中的所有文檔,以便能夠以正確的順序返回它們。

+0

我使用了內存分析器,每次搜索都看到大約20個字節項目返回。所以即使有10,000個結果的大量數據,其影響也不會超過兆字節。 – TugboatCaptain