将Solr重复值删除到多值字段中

dou*_*e38 15 indexing solr

我的Solr索引包含具有重复值的多值字段.如何删除重复项?

索引时是否可以将重复值覆盖到多值字段?

谢谢

Jor*_*azo 6

确实晚了,但在 Solr 6.0 中,最重要的答案对我来说不起作用,因为我试图在多值字段上添加重复条目。它之前就缺少处理器UniqFieldsUpdateProcessorFactory。因此,将这样的内容添加到我的 solrconfig.xml 中是有效的:

<updateRequestProcessorChain name="uniq-fields">
<processor class="org.apache.solr.update.processor.DistributedUpdateProcessorFactory"/>
<processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory">
  <str name="fieldName">YourFieldA</str>
  <str name="fieldName">yourFieldB</str>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
Run Code Online (Sandbox Code Playgroud)

其中 YourFieldA 和 YourFieldB 是 schema.xml 中定义的字段。请注意,您还必须将其添加到正确的requestHandler即:

  <requestHandler name="/update" class="solr.UpdateRequestHandler" >
<lst name="defaults">
  <str name="update.chain">uniq-fields</str>
</lst>
Run Code Online (Sandbox Code Playgroud)

这不仅可以防止添加重复项,还可以在更新指定字段时从索引中删除所有重复项。


pra*_*nay 5

我在努力实现同样的目标。这对我有用。将以下处理器添加到您的solrconfig.xml中

<updateRequestProcessorChain name="deduplicateMultiValued" default="true">
        <processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory">
            <lst name="fields">
                <str>multivaluedFieldXYZ</str>
            </lst>
        </processor>
        <processor class="solr.RunUpdateProcessorFactory" />
 </updateRequestProcessorChain>
Run Code Online (Sandbox Code Playgroud)


Jay*_*dra 1

您需要在客户端处理它以删除重复的值。

您可以自定义实现,例如RemoveDuplicatesTokenFilterFactory(适用于相同位置的相同文本)来过滤掉标记。基本上写一个扩展。或者

另外,如果仅使用多值字段进行分面,则分面字段中的值仅计算一次。因此,即使您添加多个相同的值,也会在构面计数条目中反映为单个值。已经测试过了。你也可以确认。

然而,重复的值会导致 lengthNorm 的变化,从而影响评分。