我Solr的索引中包含有重复值的一个多值字段。 我怎样才能删除重复?
是否有可能建立索引时,重复值改写成多场?
谢谢
我Solr的索引中包含有重复值的一个多值字段。 我怎样才能删除重复?
是否有可能建立索引时,重复值改写成多场?
谢谢
我努力来完成相同的。 这为我工作。 下面处理器添加到您的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>
真的迟到了,但最多的回答并没有为我在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>
这不仅防止重复被添加,而且还取决于更新从索引中删除所有重复指定的领域。
您将需要处理它在客户端上删除重复值。
您可以自定义,如实施RemoveDuplicatesTokenFilterFactory (适用于在同一位置相同的文字),以过滤掉令牌。 基本上写的延伸。 要么
此外,如果使用多值字段只是刻面,在面的字段中的值计算一次。 所以,即使你添加多个相同的值,这将反映为在面数项单个值。 已经测试了这一点。 你也可以确认。
但是,重复的值会导致lengthNorm的变化,从而可能对得分的影响。
我使用solrJ绑定文件,并避免我定义我的多值字段作为一个HashSet重复值。
@Field("description")
public Collection<String> description = new HashSet<>();
或者你可以处理它在Solr的,但在一个UpdateRequestProcessor使其索引之前发生,你并不需要了解分析链。
您可以使用Java或一些脚本语言与ScriptUpdateProcessor
这种结构适用于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>