Solr 子文档更新破坏父非存储字段

问题描述 投票:0回答:1

我正在使用 Solr 8.11。我的 Solr 模式中有一个字段已索引但未存储 (

indexed=true stored=false
)。当我更新 Solr 文档中的另一个字段时,非存储字段中的信息会丢失(不再可搜索)。一种解决方案是重新索引 Solr 文档,但就我而言,这是不可能的。

我尝试通过创建一个包含已更新字段的子文档来解决该问题。但是,该字段也应该被索引,因此据我了解,就地更新不可用。另一方面,子文档的原子更新也会弄乱非存储的父文档字段。

我有什么选择,这对于亲子解决方案是否可行? 一种选择可能是完全拆分文档(一个包含非存储字段,另一个包含更新的字段)。然后我也许可以使用连接查询来“组合”数据。然而,这是额外的麻烦。 还有更好的选择吗?

solr solrcloud solr8
1个回答
0
投票

我在 Solr 9.2.1 中遇到了类似的问题,这个文档帮助了我:https://solr.apache.org/guide/solr/latest/indexing-guide/partial-document-updates.html#field-storage

就我而言,我有一个父文档,其中有两个未存储的字段或 docValue 或由复制字段填充,因此每次我更新子文档中的“角色”字段时,它都会清除父文档中的这两个字段。我在“地址”(不同的子文档)中有一个类似的字段,但它会保留其信息。

我的文档结构示例:

    {
      ...,
      roles: [{...}],
      addresses: [{...}]
    }

我认为对于非存储字段你有几个选择:

  • 存储字段(或者使用 docValues,如果有意义的话)
  • 通过复制字段从不同的存储字段填充字段
  • 将该字段添加到您正在进行的更新中
  • 将您的字段和您要更新的字段放入两个不同的子文档中(这会增加您的查询的复杂性,因此我只会将其作为最后的手段)
© www.soinside.com 2019 - 2024. All rights reserved.