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

如何通过Elasticsearch查询指定code_raw的所有祖先文档?

Elasticsearch层级code反向查询实现方案

无需预处理的查询方式

可以通过**脚本查询(Script Query)**直接实现,不需要提前处理数据。核心逻辑是判断文档的code_raw是否为输入值的前缀,同时限定前缀的长度范围(对应你需要的层级深度)。

示例查询DSL:

{
  "query": {
    "script": {
      "script": {
        "source": "def target = params.target_code; def doc_code = doc['code_raw'].value; return target.startsWith(doc_code) && doc_code.length() >= target.length() - 3 && doc_code.length() <= target.length();",
        "params": {
          "target_code": "A01359"
        }
      }
    }
  }
}
  • target.startsWith(doc_code):确保文档的code_raw是目标值的前缀
  • doc_code.length() >= target.length() -3:控制要返回的层级深度(比如目标值长度为5,减3后长度为2,对应最上层的A01)
  • 可根据实际层级需求调整长度差值,需要更多上级层级则增大数值

预处理优化方案

如果数据量较大,脚本查询性能可能不足,建议在索引阶段预处理:

  • 给每个文档新增字段(如code_prefixes),存储该code_raw所有上级前缀(含自身)。例如code_raw为A01359的文档,code_prefixes值为["A01359", "A0135", "A013", "A01"]
  • 查询时直接用terms查询匹配该字段,传入目标值的所有前缀列表即可:

示例查询DSL:

{
  "query": {
    "terms": {
      "code_prefixes": ["A01359", "A0135", "A013", "A01"]
    }
  }
}

这种方式查询效率远高于脚本查询,适合高频查询场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:35:18