2010-05-25 59 views
7

我正在使用Solr,並且我想面向一個字段「組」。Solr如何在大量方面值上進行縮放?

由於「組」是由用戶創建的,因此「組」可能會有大量的值。

  • Solr能夠處理這樣的用例嗎?或者Solr不適合具有大量值的分面?

  • 據我所知,我可以設置facet.limit來限制爲facet字段返回的值的數量。這對我的情況有幫助嗎? 假設我將facet.limit設置爲50,那麼在搜索中有10萬個「group」匹配值。如果加快查詢速度,或者查詢仍然很慢,因爲Solr仍然需要處理並排序所有方面價值觀並返回前50名?

  • 有關如何調整Solr以獲取大量方面值的任何提示?

謝謝。

回答

7

從1.4開始,solr處理具有大量值的構面,因爲它默認使用簡單的構面計數。 (facet.method默認爲'fc')。

在1.4之前,solr使用了一種基於過濾器的分面方法(enum),對於具有少量值的屬性來說,這種方法明顯更快。此方法每個方面值需要一個過濾器。

關於facet.limit,可以將其看作是通過facet空間(與facet.offset一起)導航的方式,就像使用行/偏移量在結果空間中導航一樣。所以10〜50的值是明智的。

與行/偏移一樣,並且由於Solr的性質,當偏移量變大時,可以預期facet.limit/facet.offset的性能會降低,但如果保持在合理的範圍內邊界。

默認情況下,solr首先輸出更頻繁的facet。

綜上所述:

  • 使用Solr的1.4

  • 確保facet.method爲 'FC'(當然,這是默認反正)。

  • 使用facet.limit/facet.offset瀏覽您的facet空間。

1

不要misregard啓用緩存刻面相關的參數(嘗試不同的緩存大小來選擇適合以及對您的系統的值):

<filterCache class="solr.FastLRUCache" size="4096" initialSize="4096" autowarmCount="4096"/> 
<queryResultCache class="solr.LRUCache" size="5000" initialSize="5000" autowarmCount="5000"/> 
相關問題