删除Solr的重复值到多值字段(Removing Solr duplicate values int

2019-08-02 12:16发布

我Solr的索引中包含有重复值的一个多值字段。 我怎样才能删除重复?

是否有可能建立索引时,重复值改写成多场?

谢谢

Answer 1:

我努力来完成相同的。 这为我工作。 下面处理器添加到您的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>


Answer 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" />

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

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

这不仅防止重复被添加,而且还取决于更新从索引中删除所有重复指定的领域。



Answer 3:

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

您可以自定义,如实施RemoveDuplicatesTokenFilterFactory (适用于在同一位置相同的文字),以过滤掉令牌。 基本上写的延伸。 要么

此外,如果使用多值字段只是刻面,在面的字段中的值计算一次。 所以,即使你添加多个相同的值,这将反映为在面数项单个值。 已经测试了这一点。 你也可以确认。

但是,重复的值会导致lengthNorm的变化,从而可能对得分的影响。



Answer 4:

我使用solrJ绑定文件,并避免我定义我的多值字段作为一个HashSet重复值。

@Field("description")
public Collection<String> description = new HashSet<>();


Answer 5:

或者你可以处理它在Solr的,但在一个UpdateRequestProcessor使其索引之前发生,你并不需要了解分析链。

您可以使用Java或一些脚本语言与ScriptUpdateProcessor



Answer 6:

这种结构适用于5.3.1的Solr

<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>  


文章来源: Removing Solr duplicate values into multivalued field
标签: solr indexing