16

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

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

谢谢

4

7 回答 7

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>
于 2013-09-25T17:38:55.963 回答
5

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

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

  <requestHandler name="/update" class="solr.UpdateRequestHandler" >
<lst name="defaults">
  <str name="update.chain">uniq-fields</str>
</lst>

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

于 2016-10-22T00:29:57.690 回答
1

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

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

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

但是,重复值会导致 lengthNorm 发生变化,因此会对评分产生影响。

于 2012-11-09T10:57:59.447 回答
1

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

@Field("description")
public Collection<String> description = new HashSet<>();
于 2018-06-28T10:08:16.817 回答
1

在最新版本的 solr 中,您可以add-distinct在对多值字段进行原子更新时使用。

add-distinct:将指定的值添加到 multiValued 字段,仅当不存在时。可以指定为单个值,也可以指定为列表。

(参考:https ://lucene.apache.org/solr/guide/8_8/updating-parts-of-documents.html )

于 2021-02-17T15:24:55.897 回答
0

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

您可以将 java 或多种脚本语言与ScriptUpdateProcessor一起使用

于 2012-11-09T11:11:22.777 回答
0

此配置适用于 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>  
于 2015-12-11T11:11:58.460 回答