我尝试了以下问题中列出的解决方案。
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
的更新链,而不是没有任何问题。
答案 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 <>();