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

Elasticsearch嵌套查询优化:从丹麦CVR Register筛选指定数组元素

丹麦CVR Register数据集成:Elasticsearch嵌套数组筛选解决方案

需求背景

已完成与丹麦CVR Register的基础集成,可正常拉取客户信息。现需在返回结果中新增两个数组对象attributter和deltagerRelation,并对两个数组做精准筛选:

筛选规则

  • deltagerRelation数组筛选:仅保留满足以下全部条件的元素
    • organisationer.hovedtype 为 'REVISION'
    • organisationer.medlemsData.attributter.vaerdier.periode.gyldigFra 非空
    • organisationer.medlemsData.attributter.vaerdier.periode.gyldigTil 为空
  • attributter数组筛选:仅保留类型为'REGNSKABSÅR_SLUT'或'REGNSKABSÅR_START'的元素

解决方案:调整嵌套查询结构

由于数组对象属于嵌套类型,普通查询无法精准筛选数组内的元素(会返回包含任意符合条件元素的整个数组),需使用Elasticsearch的nested查询结合inner_hits来实现仅返回符合条件的数组元素。

以下是实现上述需求的查询示例:

{
  "query": {
    "bool": {
      "must": [
        // 基础查询条件(示例:拉取特定vrNummer的客户信息)
        { "match": { "vrNummer": "12345678" } },
        // 筛选deltagerRelation的嵌套查询
        {
          "nested": {
            "path": "Vrvirksomhed.deltagerRelation",
            "query": {
              "bool": {
                "must": [
                  { "term": { "Vrvirksomhed.deltagerRelation.organisationer.hovedtype": "REVISION" } },
                  { "exists": { "field": "Vrvirksomhed.deltagerRelation.organisationer.medlemsData.attributter.vaerdier.periode.gyldigFra" } },
                  { "bool": { "must_not": { "exists": { "field": "Vrvirksomhed.deltagerRelation.organisationer.medlemsData.attributter.vaerdier.periode.gyldigTil" } } } }
                ]
              }
            },
            "inner_hits": {} // 返回符合条件的deltagerRelation元素
          }
        },
        // 筛选attributter的嵌套查询
        {
          "nested": {
            "path": "Vrvirksomhed.attributter",
            "query": {
              "terms": { "Vrvirksomhed.attributter.type": ["REGNSKABSÅR_SLUT", "REGNSKABSÅR_START"] }
            },
            "inner_hits": {} // 返回符合条件的attributter元素
          }
        }
      ]
    }
  }
}

关键说明

  1. 使用nested查询指定数组字段的路径,确保查询逻辑作用于数组内的单个元素
  2. 通过exists和must_not exists判断日期字段的非空/空值状态
  3. inner_hits用于在返回结果中仅保留符合筛选条件的数组元素,而非整个数组
  4. 若索引未将这两个数组字段设置为nested类型,需先更新索引映射:
{
  "mappings": {
    "properties": {
      "Vrvirksomhed": {
        "properties": {
          "deltagerRelation": { "type": "nested" },
          "attributter": { "type": "nested" }
        }
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:57:06