【问题标题】:How to count multi-valued Field in solr如何计算solr中的多值字段
【发布时间】:2017-02-07 09:33:57
【问题描述】:

我想在 SOLR 中计算多值字段。

我有两个多值字段 store_id 和 filter_id 我想计算这些字段值,例如

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

filter_id = {12,13,20,22,59,61,62,145} count_filter_id = 8

当 store_id 被更新时,count_store_id 是否也可以在 solr 中默认更新

@@ Ashraful Islam - 正如你告诉我的那样,我会改变它,但这里不会发生任何事情,我附上图片找到它。

【问题讨论】:

  • 要统计store_id还是filter_id的大小?
  • 我误解了问题检查上面的链接
  • 不,我不希望在这些字段中计数。 store_id={0,2,9} 所以这里 store_id 的计数是 3 类似于 filter_id
  • 您不能在 solr 中通过查询执行此操作。您必须在 solr 中创建一个字段并在创建时存储计数。

标签: solr


【解决方案1】:

是的,正如 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 中定义的任何链的末尾添加 RunUpdateProcessorFactory

在架构文件中添加 store_id_count 和 filter_id_count 字段

   <field name="store_id_count" type="int" stored="true"/>
   <field name="filter_id_count" type="int" stored="true"/>

重新索引文档和查询,您将在结果中看到两个新字段 store_id_count 和 filter_id_count。

希望这会有所帮助, 维诺德。

【讨论】:

  • 感谢 Vinod,现在当我从 mysql 数据库导入数据时它可以工作了。
  • 但是当我插入新文档时会出现一个问题,然后它将无法正常工作。它仅在我从数据中导入数据时才起作用,而不是在我在数据库中插入新文档时起作用。
  • 这个过程发生在 solr 端。对于索引到 solr 期间的每个文档,都会计算一个新字段(在您的情况下为计数)并将其添加到文档中。然后将带有新字段的更新文档索引到 Solr。
  • 哇,非常有帮助的答案,但我有一个问题:如何通过部分更新克隆的多值字段来执行类似的行为?我正在执行多值字段的更新(向其中添加一个新值),似乎在这种情况下计数器设置为 1 而不是旧计数器值 +1。
【解决方案2】:

您可以通过使用CountFieldValuesUpdateProcessorFactory 的自定义UpdateRequestProcessor chain 来做到这一点。

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多