在多值字段中删除Solr重复值

在多值字段中删除Solr重复值,solr,indexing,Solr,Indexing,我的Solr索引包含一个具有重复值的多值字段。如何删除重复项 索引时是否可以将重复值覆盖到多值字段中 谢谢您需要在客户端处理它以删除重复的值 您可以像(用于相同位置的相同文本)一样定制实现,以过滤掉标记。基本上写一个扩展名。 或 此外,如果仅对镶嵌面使用多值字段,则镶嵌面字段中的值仅计数一次。因此,即使添加多个相同的值,也会在facet count条目中作为单个值反映出来。我们已经对此进行了测试。你也可以证实 但是,重复值会导致长度标准的变化,因此会对评分产生影响 或者,您可以在Solr中处理它

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

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


谢谢

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

您可以像(用于相同位置的相同文本)一样定制实现,以过滤掉标记。基本上写一个扩展名。 或

此外,如果仅对镶嵌面使用多值字段,则镶嵌面字段中的值仅计数一次。因此,即使添加多个相同的值,也会在facet count条目中作为单个值反映出来。我们已经对此进行了测试。你也可以证实


但是,重复值会导致长度标准的变化,因此会对评分产生影响

或者,您可以在Solr中处理它,但在索引之前,您不需要了解分析链


您可以将java或许多脚本语言与我一直在努力实现的

结合使用。这对我有用。 将以下处理器添加到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>

多值场xyz

此配置适用于Solr 5.3.1

<updateRequestProcessorChain name="distinct-values" default="true">
    <processor class="solr.DistributedUpdateProcessorFactory"/>
    <processor class="solr.UniqFieldsUpdateProcessorFactory">
        <str name="fieldName">field1</str>
        <str name="fieldName">field2</str>
    </processor>
    <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>  

字段1
字段2

参加聚会真的很晚了,但在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" />


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

我使用solrJ绑定文档,为了避免重复值,我将多值字段定义为哈希集

@Field("description")
public Collection<String> description = new HashSet<>();
@字段(“说明”)
public Collection description=new HashSet();

在最新版本的solr中,您可以在对多值字段进行原子更新时使用
添加不同的

添加不同的: 将指定的值添加到多值字段(仅当尚未存在时)。可以指定为单个值或列表


(ref:)

对于当前版本的Solr,内部的lst/str行将变成一行,如下所示:多值字段xyz只需注意,这不适用于copyFields,而仅适用于文档索引时。它将删除该点上的所有重复插入。
@Field("description")
public Collection<String> description = new HashSet<>();