【问题标题】:Solr atomic update with stored copyField destination具有存储的 copyField 目标的 Solr 原子更新
【发布时间】:2018-06-26 07:15:56
【问题描述】:

我想将 Solr 原子更新与一些存储的 copyField 目标字段结合使用,这不是推荐的组合 - 所以我希望了解风险。

Solr documentation for Atomic Updates 说(我的重点):

以原子方式更新文档的核心功能要求 架构中的所有字段都必须配置为已存储(stored="true") 或 docValues (docValues="true") 除了字段 <copyField/> 目的地,必须配置为 stored="false"。 原子更新应用于现有的文档所代表的 存储的字段值。 copyField 目标字段中的所有数据必须 仅来自 copyField 来源。

但是,我有一些 copyField 目标,我想设置 stored=true 以便突出显示对它们正常工作(例如,参见 this question)。

我需要原子更新,以便(不相关的)字段可以被另一个进程修改,而不会丢失由我的进程索引的数据。

文档警告说:

如果目标配置为已存储,则 Solr 将 尝试索引字段的当前值以及 来自任何源字段的附加副本。如果这些字段包含一些 来自索引程序的信息和一些信息 来自copyField,然后是原来来的信息 进行原子更新时,索引程序中的数据将丢失。

但这意味着什么?有人可以举一个例子来说明这个信息丢失问题吗?

具体而言,我不确定“来自索引程序的一些信息和来自 copyField 的一些信息”是什么意思。

存储一个copyField 目标是否安全,同时以原子方式更新其他 字段,反之亦然?我已通过 Solr 管理控制台进行了尝试,但无法证明任何问题,但想弄清楚什么情况会引发问题。

【问题讨论】:

    标签: solr


    【解决方案1】:

    这意味着复制字段将从源字段添加一个附加值,有效地在您的 copyField 中创建一个多值字段,如果它没有被定义为多值,那么该字段将不是正确的类型并且不能对其进行进一步的更新,直到您重新索引所有内容。我目前正在努力解决这个确切的问题,因为我们需要将值作为 copyField 响应的一部分返回,这意味着它需要存储,但是如果我们执行原子操作,这样做会破坏文档的结构更新不同的字段。

    【讨论】:

    • 谢谢,看看我是否可以用我们的模式重现它 - 这是否意味着使字段多值是解决问题的一种方法?还是只会造成更多问题?
    • 如果您描述为“无法进行进一步更新”,会发生什么情况 - 更新被 Solr 拒绝并出现错误,或者它们只是无法生效,还是...?
    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    相关资源
    最近更新 更多