如何从一个字段是其他字段组合的弹性搜索中获取数据

How to get data from elasticsearch where one field is combination of other fields

我有一个 elasticsearch 数据,其中一个字段是作为多个字段的组合导出的,如下所示。

Field 1   Field 2   Field 3   Derived Field
a         b         c         a_b_c
b         c         a         b_c_a
c         a         b         c_a_b

Derived field = field1_field2_field3

我错误地在 derived field = field3_field2_field1

中创建了一些记录

我想编写一个查询来获取派生字段不等于 field1_field2_field3 的所有记录。

我试过了,但不确定什么是正确的 ES 查询。

是否可以从 ES 获取此数据。根据我的理解,ES 不支持像 SQL 这样的连接。我不确定嵌套查询是否可以帮助我。

https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html https://www.elastic.co/guide/en/elasticsearch/reference/current/joining-queries.html

最后,经过一些查找,我能够通过在 ES 中触发以下 update_by_query 脚本来解决问题。

    POST /<index_name>/_update_by_query
{
    "query": {
    "bool": {
      "filter": {
        "script": {
          "script": {
            "source": "String.valueOf(doc['field3'].value) + \"_\" + String.valueOf(doc['field2'].value) + \"_\"+ String.valueOf(doc['field1'].value) == String.valueOf(doc['derivedField'].value)",
            "lang": "painless"
          }
        }
      }
    }
  },
"script":{
    "source": " ctx._source['derivedField'] = ctx._source['field1'] + \"_\" + ctx._source['field2'] + \"_\" + ctx._source['field3'] ",
    "lang": "painless"
  }
}