You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ElasticSearch:如何筛选keyword类型JSON字段value.value中ID_TRANSACTION=304的记录

ElasticSearch 查询 JSON 字符串字段中包含特定键值对的记录

首先修正你原始查询中的语法错误(括号不闭合、结构层级错误),然后添加筛选value.value字段中包含ID_TRANSACTION=304的条件,具体方案如下:

核心思路

由于value.value是keyword类型的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
            }
          }
        },
        // 新增:筛选包含ID_TRANSACTION=304的JSON字符串
        {
          "wildcard": {
            "value.value": "*\"ID_TRANSACTION\":304*"
          }
        }
      ]
    }
  },
  "_source": true
}

可选方案:正则匹配

如果需要更精确的匹配(比如避免误匹配类似ID_TRANSACTION=3040的情况),可以替换为regexp查询:

{
  "regexp": {
    "value.value": ".*\"ID_TRANSACTION\":304(,|}).*"
  }
}

该正则会匹配ID_TRANSACTION":304后紧跟逗号或右大括号的场景,避免部分匹配。

注意事项

  • 由于keyword类型字段不支持分词,上述查询是基于整个字符串的子串匹配,性能略低于结构化字段查询;如果后续有大量此类需求,建议将value.value重新映射为object类型,以便直接查询内部字段。
  • 查询中的双引号需要转义,确保JSON语法正确。

内容的提问来源于stack exchange,提问作者NiBE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:25:12