【问题标题】:How to remove duplicates from Multivalued Fields in SOLR?如何从 SOLR 中的多值字段中删除重复项?
【发布时间】:2016-08-28 14:15:18
【问题描述】:

我尝试了以下问题中列出的解决方案。

Removing Solr duplicate values into multivalued field

我正在使用数据导入处理程序并使用 RegexTransformer 为字段创建多个值。

我的 sql 为 FOO 列返回这个

Johnny Cash、Bonnie Money、Honey Bunny、Johnny Cash

我使用 splitBy=","

将它存储到多值字段 foo
<field column="FOO" name="foo" splitBy=","/>    

它被存储在多值字段中

{“Johnny Cash”、“Bonnie Money”、“Honey Bunny”、“Johnny Cash”}

我已将此添加到 solrconfig xml

  <updateRequestProcessorChain name="distinctMultiValued" default="true">
    <!-- To remove duplicate values in a multivalued field-->
    <processor class="DistributedUpdateProcessorFactory"/>
    <processor class="UniqFieldsUpdateProcessorFactory">
        <str name="fieldRegex">foo</str>
    </processor>
    <processor class="solr.LogUpdateProcessorFactory" />        
    <processor class="solr.RunUpdateProcessorFactory" />
  </updateRequestProcessorChain>

我也尝试用 fieldName 代替 fieldRegex 并尝试 *oo 代替 foo,但重复项仍然存在。

这和 RegexTransformer 有关系吗?

我还有一个带有TrimFieldsUpdateProcessorFactory 的更新链,运行起来没有任何问题。

【问题讨论】:

    标签: solr dataimporthandler solr5


    【解决方案1】:

    可能你需要在进程类中提及完整的类名和&lt;lst name="fields"&gt; &lt;str&gt;multivaluedfield&lt;/str&gt;&lt;/lst&gt;.like

    <processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory"> <lst name="fields"> <str>multivaluedFieldXYZ</str> </lst> </processor>

    【讨论】:

    • 那行不通。从 SOLR 5 开始不推荐使用 fields 选项。
    • 在架构文件中将此过滤器添加到您的多值字段类型定义&lt;filter class="solr.RemoveDuplicatesTokenFilterFactory"/&gt;
    • 它不只是删除重复的令牌。它不会从查询结果中的字段中删除重复值,是吗?。
    【解决方案2】:

    我能够通过将 UniqFieldsUpdateProcessorFactory 移动到现有的 &lt;updateRequestProcessorChain&gt; 块来解决此问题。

      <updateRequestProcessorChain name="skip-empty" default="true">
        <!--  Next two processors affect all fields - default configuration -->
        <processor class="TrimFieldUpdateProcessorFactory" />
        <processor class="RemoveBlankFieldUpdateProcessorFactory" />
        <processor class="UniqFieldsUpdateProcessorFactory">
            <str name="fieldRegex">.*oo</str>
        </processor>
        <processor class="solr.LogUpdateProcessorFactory" />
        <processor class="solr.RunUpdateProcessorFactory" />
      </updateRequestProcessorChain>
    

    SOLR 文档UpdateRequestProcessorChain

    最多可以将一个处理器链配置为“默认”。如果不 处理器被配置为默认值,然后使用隐式默认值 LogUpdateProcessorFactory 和 RunUpdateProcessorFactory 是为 你。提供默认处理器链可能是影响的唯一方法 从某些来源(如数据导入处理程序)索引的文档。

    【讨论】:

      【解决方案3】:

      我使用 solrJ 来绑定文档,为了避免重复值,我将我的多值字段定义为 HashSet。

      @Field("描述") 公共集合描述 = new HashSet();

      【讨论】:

        猜你喜欢
        • 2012-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        相关资源
        最近更新 更多