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

如何配置Cube.js Schema以访问Elasticsearch嵌套类型字段

Elasticsearch嵌套字段对接的Cube.js Schema配置

ES里的nested类型字段是独立存储的子文档,不能直接在主cube里当普通字符串字段映射。Cube.js的ES驱动支持通过独立嵌套cube的方式对接这类字段,会自动生成符合ES语法的嵌套查询,不需要手动拼接查询DSL。

正确的Schema配置

// 顶层文档对应的主Cube
cube(`Cubepoc`, {
  sql: `SELECT * FROM cubepoc`,

  // 声明和嵌套子文档的关联关系
  joins: {
    PatientProduct: {
      relationship: `hasMany`
    }
  },

  measures: {},

  dimensions: {
    pname: {
      sql: `pname`,
      type: `string`,
      title: `Patient Name`
    },
    pconcern: {
      sql: `pconcern`,
      type: `string`,
      title: `Patient Concern`
    },
    // 移除原有错误的product string字段配置
  }
});

// 嵌套子文档对应的独立Cube
cube(`PatientProduct`, {
  // 核心语法:用NESTED关键字绑定product的嵌套路径
  sql: `SELECT * FROM cubepoc NESTED product`,

  measures: {},

  dimensions: {
    medicine1: {
      sql: `product.medicine1`,
      type: `string`,
      title: `Medicine 1`
    },
    medicine2: {
      sql: `product.medicine2`,
      type: `string`,
      title: `Medicine 2`
    }
  }
});

配置关键注意点

  • 嵌套cube必须在sql语句中通过NESTED 嵌套路径语法声明,Cube.js会自动识别这个上下文,在生成ES查询时自动带上对应的nested.path参数,和手动写ES原生嵌套查询的逻辑完全一致
  • 不能在主cube中直接映射嵌套字段下的属性(比如直接写sql: product.medicine1),这种写法不会触发嵌套查询逻辑,会因为字段上下文不对导致查询结果异常
  • 原有配置里把product整体映射为string字段的写法,会把嵌套数组直接序列化为字符串返回,既无法做字段筛选,也没法访问内部的药品属性,必须移除
  • 配置完成后,对嵌套cube内的字段做维度聚合、条件筛选时,Cube.js会自动在ES查询中注入对应的嵌套路径参数,和原生嵌套查询的查询结果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 05:06:03