如何从SOLR中的多值字段中删除重复项?

时间:2016-05-03 13:34:59

标签: solr dataimporthandler solr5

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

Removing Solr duplicate values into multivalued field

我正在使用dataimport处理程序并使用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的更新链,而不是没有任何问题。

3 个答案:

答案 0 :(得分:0)

可能需要在流程类中提及完整的类名称,并在<lst name="fields"> <str>multivaluedfield</str></lst>.中提及

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

答案 1 :(得分:0)

我能够通过将UniqFieldsUpdateProcessorFactory移动到我现有的 <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> 块来解决这个问题。

{{1}}

SOLR文档UpdateRequestProcessorChain

  

最多可以将一个处理器链配置为&#34;默认&#34;。如果不   处理器配置为默认值,然后使用隐式默认值   为其创建了LogUpdateProcessorFactory和RunUpdateProcessorFactory   您。提供默认处理器链可能是影响的唯一方式   从某些来源索引的文档,例如dataimport handler。

答案 2 :(得分:0)

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

@Field(“ description”) 公共集合描述=新的HashSet <>();