Solr:从另一个solr内核导入时避免重复的记录

问题描述:

我想从solr内核导入使用DIH的另一个内核中的单个列。 Solr的版本是6.4.0Solr:从另一个solr内核导入时避免重复的记录

我的托管模式文件有如下条目:

<uniqueKey>journal</uniqueKey> 
<field name="journal" type="text_general" multiValued="false" indexed="true" stored="true" /> 
<field name="fjournal" type="string" indexed="true" stored="false"/> 

而且一个copyField设置如下图所示:

<copyField source="journal" dest="fjournal" /> 

在solrconfig.xml中,我配置以下元素:

<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" /> 

<requestHandler> 
    <lst name="defaults"> 
     <str name="config">solr-data-config.xml</str> 
    </lst> 
</requestHandler> 

<updateRequestProcessorChain> 
    <processor class="solr.UniqFieldsUpdateProcessorFactory"> 
     <str name="fieldName">journal</str> 
    </processor> 

    <processor class="solr.LogUpdateProcessorFactory" /> 
    <processor class="solr.RunUpdateProcessorFactory" /> 
</updateRequestProcessorChain> 

而以下内容位于文件“solr-data-config.xml “

<dataConfig> 
    <document> 
    <entity name="journalMaster" processor="SolrEntityProcessor" 
      url="http://localhost:8983/solr/journalMaster " 
      query="*:*" 
      fl="journal"/> 
    </document> 
</dataConfig> 

当我执行导入过程时,导入后的值已完成,仍然保留重复的值。

{ "journal":"Journal of Immunology", 
     "_version_":1559554209274134528, 
     "fjournal":"Journal of Immunology"}, 
     { 
     "journal":"Journal of Immunology", 
     "_version_":1559554209373749248, 
     "fjournal":"Journal of Immunology"}, 
     { 
     "journal":"Journal of Immunology", 
     "_version_":1559554209375846400, 
     "fjournal":"Journal of Immunology"}, 

如何避免发生这种情况?我将数据从本地核心导入另一个核心。

任何帮助将非常感激。

+0

不要使用文本字段的唯一键场 - 尝试使用字符串字段为唯一键,和然后将其复制到文本字段中。 UniqFieldsUpdateProcessor也仅适用于当前文档中多值字段内的值,而不是文档之间的值。 – MatsLindh

+0

嗨MatsLind,感谢您的信息。我会尝试你的建议, –

定义uniqueKey时,不需要分析内容。 只需要一个字符串来唯一标识文档。 这个独特的标识符将用于许多不同的Lucene/Solr功能,因此正确定义它非常重要。

在你的例子中,我会使用'fjournal'作为唯一键。

然后,没有别的事可以担心了,每次重新索引同一个fjournal时,Solr文档都会被覆盖,所以您最终会得到每个值的单个条目。

可能是一个更好的好奇心会知道你为什么需要索引单个文档派出...

+0

嗨亚历山德罗,谢谢你的建议。我将日记栏更改为字符串类型,并删除了另一栏。 –

+0

为什么我不得不在这里寻找一个索引列,是的,我只需要来自主核心的这个特定列的唯一值。该核心拥有超过1000万条记录,并且该字段的重复条目更多。我试图在主核心的同一列上创建面,但由于它被定义为“text_general”,我只是在facet查询中获得了标记化计数。所以我计划只把列中的值放入一个新的核心,但是索引,这样它就不会重复。 –

+0

嗨拉扎尔, 我会做的,是设置日记字段的副本字段,配置为字符串类型。 然后,在原始集合中,您可以在这个新字段上使用faceting(它将具有相同的源内容,但未分析)。 当面对你可以玩facet极限参数,看看你喜欢多少独特的价值(与发生的相关计数) –