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

如何在ES中使用match_phrase查询多层nested字段匹配aaa的文档

ES嵌套字段match_phrase查询方案

前置说明

  • 你的索引存在两层嵌套结构:第一层student为nested类型,第二层student.R1634640669477.school也为nested类型,查询时必须逐层用nested语法声明查询路径
  • 你当前school.name的字段类型为keyword,该类型默认会把整个字段值作为单个词项存储,match_phrase是针对分词后的text字段做短语匹配的语法,使用时要注意字段类型适配

适配当前mapping的match_phrase查询

如果要精准匹配school.name值为aaa school的文档,直接使用如下DSL:

GET 替换为你的索引名/_search
{
  "query": {
    "nested": {
      "path": "student",
      "query": {
        "nested": {
          "path": "student.R1634640669477.school",
          "query": {
            "match_phrase": {
              "student.R1634640669477.school.name": "aaa school"
            }
          },
          "inner_hits": {} // 可选配置,返回匹配到的具体school数组元素
        }
      }
    }
  }
}

仅搜索关键词「aaa」的适配方案

如果只输入aaa就要命中对应数据,有两种可选方式:

  1. 修改mapping将school.name改为text类型,ES会自动将aaa school分词为aaa、school两个词项,此时用原match_phrase查询aaa即可命中
  2. 不修改mapping的前提下,替换为wildcard查询实现模糊匹配:
GET 替换为你的索引名/_search
{
  "query": {
    "nested": {
      "path": "student",
      "query": {
        "nested": {
          "path": "student.R1634640669477.school",
          "query": {
            "wildcard": {
              "student.R1634640669477.school.name": "*aaa*"
            }
          },
          "inner_hits": {}
        }
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:09:03