【问题标题】:Solr: Avoid duplicated records while importing from another solr coreSolr:从另一个 solr 核心导入时避免重复记录
【发布时间】:2017-02-17 04:53:16
【问题描述】:

我正在尝试使用 DIH 将单个列从 solr 核心导入另一个核心。 Solr 版本是 6.4.0

我的托管模式文件包含以下条目:

<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"},

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

任何帮助将不胜感激。

【问题讨论】:

  • 不要为 uniqueKey 字段使用 TextField - 尝试为 uniqueKey 使用字符串字段,然后将其复制到文本字段中。 UniqFieldsUpdateProcessor 也仅适用于当前文档中多值字段内的值 - 不适用于文档之间。
  • 您好 MatsLind,感谢您提供的信息。我会试试你的建议,

标签: solr dih


【解决方案1】:

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

在您的示例中,我将使用“fjournal”作为唯一键。

然后,没有什么可担心的,每次您重新索引同一个期刊时,Solr 文档都会被覆盖,因此您最终会得到每个值一个条目。

可能更好的好奇心是知道为什么需要索引单个字段文档...

【讨论】:

  • 嗨亚历山德罗,感谢您的建议。我将日志列更改为字符串类型并删除了另一列。
  • 为什么我必须在这里使用单个索引列,因为我只需要主核心中这个特定列的唯一值。该核心拥有超过 1000 万条记录,其中该字段的重复条目更多。我尝试在主核心的同一列上进行构面,但由于它被定义为“text_general”,所以我只是在构面查询中获得标记化计数。所以我计划只将列中的值放入一个新的核心,但要建立索引,这样它就不会重复。
  • 嗨 Lazar,我会做的是为日志字段设置一个复制字段,配置为字符串类型。然后,在原始集合中,您可以在这个新字段上使用 faceting(这将具有与源相同的内容,但未分析)。分面时,您可以使用分面限制参数来查看您喜欢多少个唯一值(以及相关的出现次数)
  • 嗨亚历山德罗,感谢您的建议。如果您不介意,可以分享分面限制选项的示例。根据您之前的建议,我能够获得独特的价值并创建所需的核心。再次感谢您的帮助。
  • cwiki.apache.org/confluence/display/solr/… 这是官方文档。希望对您有所帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
相关资源
最近更新 更多