緩存在 Solr 中充當了一個非常重要的角色,Solr 中主要有這三種緩存:
- Filter cache(過濾器緩存),用於保存過濾器(fq 參數)和層面搜索的結果
- Document cache(文檔緩存),用於保存 lucene 文檔存儲的字段
- Query result(查詢緩存),用於保存查詢的結果
還有第四種緩存,lucene 內部的緩存,不過該緩存外部無法控制到。
通過這 3 種緩存,可以對 solr 的搜索實例進行調優。調整這些緩存,需要根據索引庫中文檔的數量,每次查詢結果的條數等。
在調整參數前,需要事先得到 solr 示例中的以下信息:
- 索引中文檔的數量
- 每秒鍾搜索的次數
- 過濾器的數量
- 一次查詢返回最大的文檔數量
- 不同查詢和不同排序的個數
這些數量可以在 solr admin 頁面的日志模塊找到。假設以上的值分別為:
- 索引中文檔的數量:1000000
- 每秒鍾搜索的次數:100
- 過濾器的數量:200
- 一次查詢返回最大的文檔數量:100
- 不同查詢和不同排序的個數:500
然后可以開始修改 solrconfig.xml 中緩存的配置了,第一個是過濾器緩存:
1
|
< filterCache class = "solr.FastLRUCache" size = "200" initialSize = "200" autowarmCount = "100" />
|
第二個是查詢結果緩存:
1
|
< queryResultCache class = "solr.FastLRUCache" size = "500" initialSize = "500" autowarmCount = "250" />
|
第三個是文檔緩存:
1
|
< documentCache class = "solr.FastLRUCache" size = "11000" initialSize = "11000" />
|
這幾個配置是基於以上的幾個假設的值進行調優的。
如果這個參數設置為 true,不是直接請求的字段將會被延遲加載。這個可以提高性能,在查詢只是查小數據量字段時,那些大內容字段將會延遲加載。
1
|
< enableLazyFieldLoading >true</ enableLazyFieldLoading >
|