如何在Elasticsearch中传递地图值并使用params参与部分更新?

时间:2017-09-01 02:27:12

标签: elasticsearch

我在弹性搜索中使用脚本时遇到问题,我有一个存储地图字段的文档,我想使用scirpt部分更新文档,对于普通字段,我可以使用参数传递值,但我不会'知道如何通过params更新map字段,这种情况有什么解决方案吗? 提前感谢您的回复。

例如,我有文档:

{
   "_index": "tour-1",
   "_type": "product",
   "_id": "5587375",
   "_version": 1033,
   "found": true,
   "_source": {
      "active": 1,
      "departurePrices": {
          "1": {
             "minPrice": 1000,
             "tradePrice": 800
          },
          "2": {
             "minPrice": 2000,
             "tradePrice": 2500
          }
      }
   }
}

对于活动字段我可以传递类似下面脚本的值,但是departurePrices字段存储为地图,如何通过params来更新departurePrices.1.minPrice和departurePrices.1.tradePrice?的值? / p>

POST tour-1/product/5587375/_update
{
    "script" : {
        "inline": "ctx._source.active=params.active;",
        "lang": "painless",
        "params" : {
            "active" :1
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您可以尝试这样:

POST tour-1/product/5587375/_update
{
    "script" : {
        "inline": "ctx._source.departurePrices[params.mapKey] = params.mapValues;",
        "lang": "painless",
        "params" : {
            "mapKey": "1",
            "mapValues": {
              "minPrice": 990,
              "tradePrice": 850
            }
        }
    }
}