如何从 SOLR 中的多值字段中删除重复项?
How to remove duplicates from Multivalued Fields in SOLR?
我尝试了以下问题中列出的解决方案。
Removing Solr duplicate values into multivalued field
我正在使用数据导入处理程序并使用 RegexTransformer 为字段创建多个值。
我的 sql returns 这个用于列 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
的更新链,运行没有任何问题。
您可能需要在 class 和 <lst name="fields"> <str>multivaluedfield</str></lst>.
过程中提及完整的 class 名称,例如
<processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory">
<lst name="fields">
<str>multivaluedFieldXYZ</str>
</lst>
</processor>
我能够通过将 UniqFieldsUpdateProcessorFactory 移动到现有的 <updateRequestProcessorChain>
块来解决这个问题。
<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
At most one processor chain may be configured as the "default". if no
processor is configured as a default, then an implicit default using
LogUpdateProcessorFactory and RunUpdateProcessorFactory is created for
you. Supplying a default processor chain may be the only way to affect
documents indexed from some sources like the dataimport handler.
我正在使用 solrJ 绑定文档,为了避免重复值,我将多值字段定义为 HashSet。
@Field("description")
public 集合描述 = new HashSet<>();
我尝试了以下问题中列出的解决方案。
Removing Solr duplicate values into multivalued field
我正在使用数据导入处理程序并使用 RegexTransformer 为字段创建多个值。
我的 sql returns 这个用于列 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
的更新链,运行没有任何问题。
您可能需要在 class 和 <lst name="fields"> <str>multivaluedfield</str></lst>.
过程中提及完整的 class 名称,例如
<processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory">
<lst name="fields">
<str>multivaluedFieldXYZ</str>
</lst>
</processor>
我能够通过将 UniqFieldsUpdateProcessorFactory 移动到现有的 <updateRequestProcessorChain>
块来解决这个问题。
<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
At most one processor chain may be configured as the "default". if no processor is configured as a default, then an implicit default using LogUpdateProcessorFactory and RunUpdateProcessorFactory is created for you. Supplying a default processor chain may be the only way to affect documents indexed from some sources like the dataimport handler.
我正在使用 solrJ 绑定文档,为了避免重复值,我将多值字段定义为 HashSet。
@Field("description") public 集合描述 = new HashSet<>();