我想将Solr原子更新与一些存储的copyField
目标字段结合使用,这不是推荐的组合 - 所以我希望了解风险。
Solr documentation for Atomic Updates说(我的重点):
原子更新文档的核心功能需要这样做 必须将架构中的所有字段配置为已存储(存储=" true") 或docValues(docValues =" true")除了字段
<copyField/>
个目的地,必须配置为已存储=&#34; false&#34; 。 原子更新应用于现有文档所代表的文档 存储的字段值。 copyField目标字段中的所有数据都必须 仅源自copyField源。
但是,我有一些copyField
个目的地,我想设置stored=true
,以便突出显示对他们正常工作(例如,请参阅this question)。
我需要原子更新,以便其他进程可以修改(不相关的)字段,而不会丢失我的进程索引的数据。
文档警告说:
如果目的地配置为已存储,则Solr将 尝试索引字段的当前值以及 来自任何源字段的附加副本。如果这些字段包含一些 来自索引程序的信息和一些信息 来自copyField,然后是最初来的信息 在进行原子更新时,索引程序将丢失。
但这意味着什么?有人能举例说明这种信息丢失问题吗?
我不确定&#34;来自索引程序的一些信息以及来自copyField&#34;的具体信息。
存储一个copyField
目的地是否安全,同时原子地更新其他字段,反之亦然?我已经通过Solr管理控制台尝试了这一点,并且无法证明任何问题,但希望明确在什么情况下会引发问题。
答案 0 :(得分:0)
这意味着复制字段将从源字段添加一个额外的值,有效地在copyField中创建一个多值字段,如果它没有被定义为多值字段,那么该字段将不是正确的类型,不能进一步更新,直到你重新索引一切。我目前正在努力解决这个问题,因为我们需要将值作为copyField的响应的一部分返回,这意味着它需要存储,但这样做会破坏文档的结构,如果我们做一个原子在不同的领域更新。