2017-02-07 24 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