【问题标题】:ElasticSearch NEST bulk upsertElasticSearch NEST 批量更新插入
【发布时间】:2022-08-10 00:54:12
【问题描述】:

我执行了以下代码,对现有文档中的Content 字段执行部分更新:

var partials = new object[]
            {
                new{
                Id = 1337,
                Content = \"test\"
            }
            };

            var response = await _elastic.BulkAsync(b => b
                .Index(indexName)
                                         .Index(indexName)
                                         .UpdateMany(partials, (bu, d) => bu.Doc(d))
                                         );

但是,如果该文档不存在并且我不确定如何插入,我想对其进行更新。我试图将 bu.Doc 更改为 bu.Upsert 但它需要一个脚本。

    标签: c# elasticsearch nest


    【解决方案1】:

    Doc()Upsert() 的工作方式与弹性“更新 API”文档中描述的相同:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html

    使用Doc(),您可以指定部分文档来更新现有文档。这不是一个更新。

    使用Upsert(),文档指出:

    如果文档不存在,则将 upsert 元素的内容作为新文档插入。如果文档存在,则执行脚本 所以upsert 部分指定了如果文档不存在会发生什么。您需要添加一个script,它针对现有文档执行。

    还有doc_as_upsert 字段与doc 结合使用。如果设置为 true,则 doc 中的文档如果不存在则插入,否则更新。您可以使用bu.DocAsUpsert() 进行设置

    【讨论】:

      猜你喜欢
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多