簡體   English   中英

緩存Lucene.net搜索結果

[英]Caching Lucene.net search results

我已經使用Lucene.net在幾個小網站上實現搜索功能(包括數據庫內容和上傳文檔),沒有任何問題。 現在我有一個網站,我索引5000多個文檔(主要是PDF),查詢變得有點慢。

我假設加速它的最佳方法是實現某種緩存。 任何人都可以給我任何指針/示例從哪里開始? 如果你除了緩存之外還有其他任何建議(例如我應該使用多個索引嗎?)我也想聽聽。

編輯:

負責緩慢查詢的啞用戶錯誤。 我一次創建了整個結果集的精彩集錦,而不僅僅是我正在顯示的“頁面”。 哎呀。

我將在這里做一個很大的假設,並假設你沒有掛在你的索引搜索者之間查詢索引的調用。

如果這是真的,那么你肯定應該為索引的所有查詢共享索引搜索者。 隨着索引變得越來越大(並且它實際上不必變得非常大以使其成為一個因素),重建索引搜索器將變得越來越多的開銷。 為了使其正常工作,您需要同步對查詢解析器類的訪問(它不是線程安全的)。

順便說一下,Java文檔(我發現)就像適用於.net版本一樣。

有關您的問題的更多信息,請參閱此處: http//wiki.apache.org/lucene-java/ImproveSearchingSpeed

一定要優化索引。

此外,這是一種快速/簡單/有效的實現緩存的方法:HttpRuntime.Cache.Add(...);

您可以使用任何類型的項目/庫中的ASP.Net緩存。

Lucene使用自己的內部“緩存”機制使索引檢索成為一種快速操作。 不過,我不認為緩存是你的問題。

5000索引文檔的大小聽起來微不足道,但這在很大程度上取決於您構建索引的方式,索引/存儲的內容,查詢方式(操作方式),文檔大小等。

請盡可能多地填寫關於索引的空白信息。

首先,Lucene本身支持內存版本的目錄:

Lucene.Net.Store.RAMDirectory

您可以像以下一樣使用它:

RAMDirectory idx = new RAMDirectory();

// Make an writer to create the index
IndexWriter writer =
    new IndexWriter(idx, new StandardAnalyzer(), true);

如果這對您有用,但它使用了太多ram,請編寫一個包裝器並將其作為接口或Web服務公開。 或者,如果您只想緩存實體從緩存中刪除時要查詢的內容,您可以編寫一個Lucene包裝器,根據關鍵字顯示緩存最常見的結果。

我更喜歡前面提到的。 使用RAMDirectory創建一個環繞Lucene存儲的Web服務或服務項目。 這樣,如果索引很大,你可以將web服務卸載到具有大量ram的另一台服務器上 - 並且具有接近即時的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM