gpt4 book ai didi

elasticsearch - 在ElasticSearch中替换(批量更新)嵌套文档

转载 作者:行者123 更新时间:2023-12-03 00:20:14 25 4
gpt4 key购买 nike

我有一个带有度假租金(100K +)的ElasticSearch索引,每个索引都包含一个带有可用日期的嵌套文档的属性(每个“父”文档1000+)。定期(每天几次),我需要为每个属性替换整个嵌套文档集(以获取每个假期出租属性的可用性的新数据)-但是ElasticSearch的默认行为是合并嵌套文档。

这是映射的片段(“bookingInfo”中的可用日期):

{
"vacation-rental-properties": {
"mappings": {
"property": {
"dynamic": "false",
"properties": {
"bookingInfo": {
"type": "nested",
"properties": {
"avail": {
"type": "integer"
},
"datum": {
"type": "date",
"format": "dateOptionalTime"
},
"in": {
"type": "boolean"
},
"min": {
"type": "integer"
},
"out": {
"type": "boolean"
},
"u": {
"type": "integer"
}
}
},
// this part left out
}
}
}
}

不幸的是,我们当前的基础业务逻辑不允许我们替换或更新“bookingInfo”嵌套文档的一部分,我们需要替换整个嵌套文档数组。使用默认行为,更新“父”文档,仅将新的嵌套文档添加到“bookingInfo”中(除非它们存在,然后对其进行更新)-索引中保留了许多不应再存在的旧日期( (如果是过去的话,则无论如何都无法预订)。

如何进行对ES的更新调用?

当前使用批量调用,例如(每个文档两行):
{ "update" : {"_id" : "abcd1234", "_type" : "property", "_index" : "vacation-rental-properties"} }
{ "doc" : {"bookingInfo" : ["all of the documents here"]} }

我发现 this question似乎相关,并且想知道以下内容是否可以工作(首先通过版本1.6+的配置文件中的 script.inline: on启用脚本):
curl -XPOST localhost:9200/the-index-and-property-here/_update -d '{
"script" : "ctx._source.bookingInfo = updated_bookingInfo",
"params" : {
"updated_bookingInfo" : {"field": "bookingInfo"}
}
}'
  • 如何将其转换为以上内容的批量调用?
  • 最佳答案

    使用ElasticSearch 1.7,这就是我解决它的方法。我希望它对某人有帮助,以备将来引用。

    { "update": { "_id": "abcd1234", "_retry_on_conflict" : 3} }\n
    { "script" : { "inline": "ctx._source.bookingInfo = param1", "lang" : "js", "params" : {"param1" : ["All of the nested docs here"]}}\n

    ...等等对于批量更新调用中的每个条目。

    关于elasticsearch - 在ElasticSearch中替换(批量更新)嵌套文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31649179/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com