c# - 如何更新Elasticsearch文档中的嵌套对象?

标签 c# elasticsearch nest

我试图找到最佳实践来更新带有嵌套对象的文档:
我正在使用ES作为 View 缓存:
假设我在SQL DB中有两个实体:
第一个是地址 Homes ,它们之间的关系太多Address Table has columns=> Id , Street, ZipCodeHome Table has colmns=> Id, AddressId(FK), price我将它们存储在汇总的ES中:

Home : {
Id: 1,
price : 3000,
Address :{
   id: 1,
   street: "blabla",
   zibcode : 12345

  }
}
如果我对“地址”进行了任何更改,我想更新所有主页文档,这些文档在“首页”索引中包含具有相同地址的新值。
我需要知道如何在对ES的一个请求中更新同一索引中的所有文档。

最佳答案

_update_by_query 可能就是您想要的。
这不是很漂亮,但是应该可以完成工作:

PUT test/_doc/1
{
  "Id": 1,
  "price": 3000,
  "Address": {
    "id": 1,
    "street": "blabla",
    "zipcode": 12345
  }
}

POST test/_update_by_query
{
  "query": { 
    "term": {
      "Address.id": 1
    }
  },
  "script": {
    "source": "ctx._source['Address']['id'] = 2;ctx._source['Address']['street'] = 'foo';ctx._source['Address']['zipcode'] = 5678"
  }
}

GET test/_doc/1
然后输出是:
{
  "_index" : "test",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 9,
  "_seq_no" : 8,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "Address" : {
      "zipcode" : 5678,
      "street" : "foo",
      "id" : 2
    },
    "price" : 3000,
    "Id" : 1
  }
}

关于c# - 如何更新Elasticsearch文档中的嵌套对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64015373/

相关文章:

c# - 解析枚举跳过已过时

django - Django-haystack:使用多个模型创建搜索索引

c# - Netcore Elasticsearch(NEST)默认索引为UriEncoded

c# - 在显示另一个窗体的同时最小化和恢复一个窗体

c# - 寻找 Silverlight/.NET 的技术和/或框架的良好总结

c# - 集中 CloudStorageAccount 和 TableServiceContext 实例

mongodb - MongoLab和Elasticsearch

java - ElasticSearch OOM 有问题,有足够的 RAM 和 ulimits 备用

elasticsearch - Elasticsearch NEST翻译

ElasticSearch 嵌套排序GeoDistance