2010-08-17 43 views
1

我正在處理使用SOLR生成基於查詢的數據集的現有Web平臺。我們有一個接近實時(< 1分鐘)發佈新內容的問題。有一種緩存機制可以幫助減少SOLR服務器上的資源負載,但是這種緩存會在基於SOLR查詢的數據集中出現新內容時引入滯後時間。Solr搜索和自動化網絡發佈 - 他們可以一起工作嗎?

我希望能夠根據生成緩存項目的SOLR查詢來使緩存無效,但我碰到了一個絆腳石:有1000多個SOLR查詢,很難知道哪個(如果有的話) )適用於給定的文件。目前我們已經確定的方法包括:

  1. 實例化SOLR實例,一次推送單個文檔,然後運行查詢以查看哪個命中。
  2. 構建一個內存中的Lucene索引,並做同樣的事情。
  3. 使用其他一些技術(手動解析SOLR查詢)來粗略估計哪些查詢會受到影響。

這些都不是真的很理想,但沒有一些方法來「轉向」過程並通過查詢CEP風格運行文檔,我不確定有更好的方法。

有沒有人處理過類似的情況?

回答

1

Solr的發出ETag的所有查詢響應,和榮譽標準HTTP緩存請求頭就像如果 - 無 - 匹配,如果-匹配,等等。參見Solr And HTTP Caches

所以這是協調解決這個緩存系統的問題。

+0

看起來不錯,但我認爲我的大問題是圍繞向Solr索引添加數據。我有穩定的補充,有時可能會有大量內容。最令人痛苦的是將這些項目添加到Solr索引以及保持最佳性能所需的重新索引。如果我要做一個HEAD請求來測試每一部分內容的緩存,恐怕我可能會很快使服務器癱瘓。 – 2010-08-17 18:03:08

+0

@Harper:你不需要發送HEAD請求來測試緩存,這不是HTTP緩存的工作方式。請參閱http://www.grabner-online.de/div_into/html/ch11s03s04.html – 2010-08-17 18:46:37

+0

@Harper:通過這種方式,您可以將緩存過期委託給它所屬的Solr。 – 2010-08-17 18:50:00

0

我認爲標準的方法是從單個更改的文檔中創建一個「索引」(使用memory index)。然後,您在此索引上運行數千個查詢,並且如果查詢匹配,則會使該查詢的緩存無效。由於指數非常小,完全在記憶中,因此速度非常快。

相關問題