根据 Kibana/Elasticsearch 中的条件更新文档中的字段

Bab*_*abu 0 elasticsearch kibana

我正在尝试根据某些条件更新文档中的特定字段。在一般的sql方式中,我想做以下事情。

Update index indexname
set name =  "XXXXXX"
where source: file and name :  "YYYYYY"
Run Code Online (Sandbox Code Playgroud)

我正在使用下面的内容来更新所有文档,但我无法添加任何条件。

POST indexname/_update_by_query
{
  "query": { 
    "term": {
      "name": "XXXXX"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的模板:

{
  "indexname": {
    "mappings": {
      "idxname123": {
        "_all": {
          "enabled": false
        },
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "date1": {
            "type": "date",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "source": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有人可以指导我如何按照上面提到的来源和名称添加条件。

谢谢,巴布

Kam*_*mal 5

您可以使用以下查询来查找您要查找的内容。我假设namesource是您索引中的字段。

POST <your_index_name>/_update_by_query
{
  "script": {
    "inline": "ctx._source.name = 'XXXXX'",
    "lang": "painless"
  },
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "name": {
              "value": "YYYYY"
            }
          }
        },
        {
          "term": {
            "source": {
              "value": "file"
            }
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用布尔查询中的任何全文查询术语查询来进行搜索/更新/删除。

一定要花一些时间来浏览它们。

注意Term Queries仅当字段的数据类型为keyword

希望这可以帮助!