使用存储的copyField目标

时间:2018-01-17 11:55:36

标签: solr

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

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

  

原子更新文档的核心功能需要这样做   必须将架构中的所有字段配置为已存储(存储=&#34; true&#34;)   或docValues(docValues =&#34; true&#34;)除了字段   <copyField/>个目的地,必须配置为已存储=&#34; false&#34; 。   原子更新应用于现有文档所代表的文档   存储的字段值。 copyField目标字段中的所有数据都必须   仅源自copyField源。

但是,我有一些copyField个目的地,我想设置stored=true,以便突出显示对他们正常工作(例如,请参阅this question)。

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

文档警告说:

  

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

但这意味着什么?有人能举例说明这种信息丢失问题吗?

我不确定&#34;来自索引程序的一些信息以及来自copyField&#34;的具体信息。

存储一个copyField目的地是否安全,同时原子地更新其他字段,反之亦然?我已经通过Solr管理控制台尝试了这一点,并且无法证明任何问题,但希望明确在什么情况下会引发问题。

1 个答案:

答案 0 :(得分:0)

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

相关问题