首页 > 解决方案 > 根据条件添加字段和值

问题描述

我试图根据现有索引的条件添加字段和值。上下文:1 000 000“行”和一个索引。

执行此操作的最有效方法是什么:

If field_a = 1 and (field_b > 0 or field_c > 0 or field_d > 0)
    then
        add new field field_e with value = 1 
    else
        add new field field_e with value = 0 

标签: elasticsearch

解决方案


这绝对可以通过查询 API 更新来实现:

POST index/_update_by_query
{
  "query": {
    "bool": {
      "filter": [
        {"exists": {"field": "field_a"}},
        {"exists": {"field": "field_b"}},
        {"exists": {"field": "field_c"}},
        {"exists": {"field": "field_d"}}
      ]
    }
  },
  "script": {
    "source": "ctx._source.field_e = (ctx._source.field_a == 1 && (ctx._source.field_b > 0 || ctx._source.field_c > 0 || ctx._source.field_d > 0)) ? 1 : 0"
  }
}

推荐阅读