elasticsearch 查询JSON字符串中的字段

8dtrkrch  于 12个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(219)

我试图在ElasticSearch中从这个结构中查询字段value.value,它是一个JSON字符串。

我写了这个查询来缩小搜索范围:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "valueType": {
              "value": "VARIABLE",
              "boost": 1
        }
      }
    },
    {
      "term": {
        "intent": {
          "value": "CREATED",
          "boost": 1
        }
      }
    },
  
    {
      "term": {
        "recordType": {
          "value":"EVENT",
          "boost": 1
        }
      }
    },
    {
      "term": {
        "position": {
          "value":16185492,
          "boost": 1
        }
      }
    }
  ]
}
  }
  "_source": true
}

但是我不知道如何从字段value.value中只获取ID_TRANSACTION=304的记录。此字段是类型关键字。这里的Map:

pgky5nke

pgky5nke1#

实际上,理想情况下,我们应该有一个带有json处理器的摄取管道,用于将value.value内容解析为您可以查询的特定字段。
然而,问题是Map是由Zeebe用dynamic: strict定义的,这意味着不可能在文档中添加新字段。此外,也不能使用value.value作为包含解析的JSON字段的对象,因为value.value被定义为keyword,并且不能更改。
实现这一点的唯一方法是更改Zeebe中存在的record-variable index template,以允许创建新字段。
如果你有权利这样做,或者如果你知道有人可以为你做,这里是如何做到这一点。
首先,创建一个摄取管道,将value.value中的JSON内容解析为可以查询的单独字段:

PUT _ingest/pipeline/value-json-pipeline
{
  "processors": [
    {
      "json": {
        "field": "value.value",
        "target_field": "value.valueJson"
      }
    }
  ]
}

然后,像这样修改zeebe-record-variable-template.json文件:

{
  "index_patterns": [
    "zeebe-record_variable_*"
  ],
  "composed_of": ["zeebe-record"],
  "priority": 20,
  "version": 1,
  "template": {
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 0,
      "index.queries.cache.enabled": false,
      "index.default_pipeline": "value-json-pipeline"   <--- add this new setting
    },
    "aliases": {
      "zeebe-record-variable": {}
    },
    "mappings": {
      "properties": {
        "value": {
          "dynamic": "strict",
          "properties": {
            "name": {
              "type": "keyword"
            },
            "value": {
              "type": "keyword",
              "ignore_above": 8191
            },
            "valueJson": {                             <--- add this new field
              "type": "object"
            },
            "scopeKey": {
              "type": "long"
            },
            "processInstanceKey": {
              "type": "long"
            },
            "processDefinitionKey": {
              "type": "long"
            },
            "bpmnProcessId": {
              "type": "keyword"
            },
            "tenantId": {
              "type": "keyword"
            }
          }
        }
      }
    }
  }
}

当创建下一个zeebe-record_variable_8.2.12_*每日索引时,它将使用新的摄取管道来获得新的Map,该管道将解析value.value内容并将其放入您将能够查询的value.valueJson中。

相关问题