2017-02-07 49 views
0

我想對SOLR中的多值字段進行計數。如何計算solr中的多值字段

我有兩個多值字段STORE_ID和過濾器_id ,我想計數像

STORE_ID = {0,3,7} count_store_id = 3

過濾器_id = {12這些字段值, 13,20,22,59,61,62,145} count_filter_id = 8

enter image description here

,並且是可能的時STORE_ID然後更新count_store_id也在默認情況下solr更新

@@ Ashraful伊斯蘭 - 正如你告訴我,我會改變它,但沒有什麼事情發生在我附上圖像找到它。

enter image description here

+0

要計算store_id或filter_id的大小嗎? –

+0

http://stackoverflow.com/questions/6240092/solr-function-query-that-operates-on-count-of-multivalued-field –

+0

我誤解了這個問題檢查上面的鏈接 –

回答

2

是的,如Alexandre Rafalovitch所建議的那樣,通過使用定義自定義UpdaterequestProcessor,您可以獲得多值字段的計數值。

在solrconfig.xml中添加以下行

<updateRequestProcessorChain name="multivaluecountnum" default="true"> 
    <processor class="solr.CloneFieldUpdateProcessorFactory"> 
    <str name="source">store_id</str> 
    <str name="dest">store_id_count</str> 
    </processor> 
<processor class="solr.CloneFieldUpdateProcessorFactory"> 
    <str name="source">filter_id</str> 
    <str name="dest">filter_id_count</str> 
    </processor> 
    <processor class="solr.CountFieldValuesUpdateProcessorFactory"> 
    <str name="fieldName">store_id_count</str> 
    </processor> 
<processor class="solr.CountFieldValuesUpdateProcessorFactory"> 
    <str name="fieldName">filter_id_count</str> 
    </processor> 
    <processor class="solr.DefaultValueUpdateProcessorFactory"> 
    <str name="fieldName">store_id_count</str> 
    <int name="value">0</int> 
    </processor> 
<processor class="solr.DefaultValueUpdateProcessorFactory"> 
    <str name="fieldName">filter_id_count</str> 
    <int name="value">0</int> 
    </processor> 
<processor class="solr.LogUpdateProcessorFactory" /> 
    <processor class="solr.RunUpdateProcessorFactory" /> 
</updateRequestProcessorChain> 

不要忘了你solrconfig.xml中定義

添加store_id_count和filter_id_count領域在架構文件

任何鏈的末端添加RunUpdateProcessorFactory
<field name="store_id_count" type="int" stored="true"/> 
    <field name="filter_id_count" type="int" stored="true"/> 

Reindex文檔和查詢,您會在結果中看到兩個新字段store_id_count和filter_id_count。

希望這會有幫助, Vinod。

+0

感謝Vinod,現在它工作時我從mysql數據庫導入數據。 –

+0

但有一個問題,當我插入新文件,那麼它將無法正常工作。它只在我從數據導入數據時才工作,而不是當我在數據庫中插入新文檔時。 –

+0

這個過程發生在solr側。對索引solr期間的每個文檔,計算一個新字段(在您的情況下計數)並將其添加到doc中。然後用新字段更新的文檔被索引到Solr中。 – vinod