Solr4.4 優化之 Filter Cache配置

 

 

      本文描述solr的cache類型之一:filter cache。接下來,我會解釋它是什麼、怎麼配置它以及如何更好的使用它。 

What it is used for? 
       先從內部機制開始。FilterCache存儲了一些無序的文檔標識號(ID)。這些ID並不是我們在schema.xml裏配置的unique key,而是solr內部的一個文檔標識。請記住這個。 

        FilterCache的任務是保持與用戶過濾的結果關聯。另外,cache可以輔助facet機制(在使用TermEnum時),在solrconfig.xml中的<useFilterForSortedQuery/>參數設爲true時,還可以進行排序。 

FilterCache的標準定義如下: 

Xml代碼  收藏代碼
  1. <filterCache  
  2.     class="solr.FastLRUCache"  
  3.     size="16384"  
  4.     initialSize="4096"  
  5.     autowarmCount="4096" />  



有以下的配置可供選擇: 
    class:實現類。建議使用solr.FastLRUCache,它能在大量的GET、PUT操作下,提供更好的性能。 
    size:cache的最大值。 
    initialSize:cache的初始化值。 
    autowarmCount:從舊的cache到新的cache時,需要被複制的數量。 
    minSize:在full restoraton的情況下,將cache減小後的值 
    acceptableSize:如果minSize沒有設置,則該值會替代之 
    cleanupThread:默認false,如果設爲true則會使用一個分離的topic來清理cache。 

大部分情況下,設置initialSize和autowarmCount就已經足夠了。 

How to configure? 
       cache的大小,需要根據基本的查詢語句而定;maximum大小應該至少等於我們使用的過濾字段的大小。舉個例子說明:如果在某個時間內,你的應用程序使用了2000個查詢參數,則minimum的大小應該最小設爲2000。 

Efficient use 
    然而,光有配置是不夠的,我們還需要讓查詢能夠使用它。請看下面的例子: 

Url代碼  收藏代碼
  1. q=name:solr+AND+category:ksiazka+AND+section:ksiazki  



初看起來,查詢語句是正確的。但是有個問題:它並沒有用到filterCache。所有的請求將會綁定到queryResultCache中並創建一個單獨的條目。我們來作一下修改: 

Url代碼  收藏代碼
  1. q=name:solr&fq=category:ksiazka&fq=section:ksiazki  



有什麼變化呢?在這個例子中,一個條目會寫入到queryResultCache中;另外,還會有兩個條目會寫入到filterCache中。現在看一下下面的語句: 

Url代碼  收藏代碼
  1. q=name:lucene&fq=category:ksiazka&fq=section:ksiazki  



這個查詢會創建一個條目到queryResultCache中,但是會使用filterCache中兩個已經存在的條目。這樣查詢的執行時間會降低,IO的使用也會節省。 

然而,對於下面的查詢: 

Url代碼  收藏代碼
  1. q=name:lucene+AND+category:ksiazka+AND+section:ksiazki  



solr不能使用任何cache並且需要從lucene索引中收集所有的信息。 

Last few words 
就像你所看到的,配置cache 的正確方法不是如何保證solr能夠使用它,而是如何構建查詢語句來提升性能。當考慮查詢的時候,請考慮這一點。 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章