全部產品
Search
文件中心

OpenSearch:複合資料型別

更新時間:Jan 20, 2026

行業演算法版支援OBJECT和NESTED兩種複合資料型別,允許將多個欄位組合在一起,形成嵌套結構。正確使用複合資料型別,能提升查詢準確性,避免錯誤匹配,讓複雜資料管理更高效。

使用須知

在資料格式層面,OBJECT與NESTED接收相同結構的JSON資料,且基礎配置方法相似。但二者在查詢行為上有本質區別:NESTED保持對象邊界完整性,而 OBJECT會扁平化資料。

類型

OBJECT

NESTED

底層儲存方式

扁平化(Flattened)儲存,丟失對象邊界。
例如:
{ "user": [{"name":"Alice","age":30}, {"name":"Bob","age":25}] }
儲存為:
user_name: ["Alice", "Bob"]
user_age: [30, 25]




採用主子文檔隔離儲存區 (Isolated Storage),保留對象完整性。

查詢語義

可能出現跨對象匹配情況,但是效能更優。
例:user_name: "Alice" AND user_age: 25

可以匹配到 Alice(30歲)和 Bob(25歲)的不同user對象。

嚴格限制為同一個對象。
例:user_name: "Alice" AND user_age: 30

只能匹配 name="Alice" 且 age=30 的同一個 user 對象。

使用限制

OBJECT和NESTED內部欄位會按照層級鋪平(通過底線拼接),可以在索引結構和屬性欄位中進行配置。

  • 行業演算法版中對OBJECT和NESTED欄位有以下限制:

    • 欄位總個數不能超過10個;

    • 欄位最大嵌套深度為5層;

    • 欄位本身不能作為屬性;

    • 同層級其他欄位名不能以{OBJECT欄位名}_或者{NESTED欄位名}_為首碼(比如某個OBJECT欄位名為abc,同層級其他欄位名不能為abc_d等);

    • 只支援獨享型應用。

  • OBJECT和NESTED內部欄位有以下使用限制:

    • 不支援向量分析器;

    • 不能配置為分欄欄位、倒排索引排序欄位、向量索引命名空間;

    • 不支援複合式索引;

    • 建立的索引名必須與欄位名相同;

    • 不支援排序運算式;

    • 不能配置為展示欄位;

    • 不能配置為模型訓練欄位。

使用樣本

應用建立

詳細文法請參見Schema

{
  "name": "json_nested",
  "type": "NESTED",
  "primaryKey": false,
  "innerSchema": {
    "job": {
      "name": "job",
      "type": "TEXT",
      "primaryKey": false
    },
    "ssn": {
      "name": "ssn",
      "type": "LITERAL",
      "primaryKey": false
    }
  }
}

欄位

類型

描述

type

String

欄位類型,詳細欄位資訊請參見應用結構

name

String

欄位名

primaryKey

Boolean

是否是主鍵

joinWith

Array

外錶鏈接的資料表集合

innerSchema

Object

當欄位類型為OBJECT或者NESTED時指定其資料結構,支援嵌套。

資料推送

以OBJECT類型為例,欄位整體作為一個JSON字串。

[
    {
        "cmd": "add",
        "timestamp": 1401342874777,
        "fields": {
            "id": "1",
            "title": "This is the title",
            "json_nested": "[{\"job\":\"其他\",\"ssn\":\"abc\"}]"
        }
    },
    {
        "cmd": "update",
        "timestamp": 1401342874778,
        "fields": {
            "id": "1",
            "json_nested": "{\"job\":\"安全員\",\"ssn\":\"abc\"}" // 可以為單個object
        }
    },
    {
        "cmd": "delete",
        "fields": {
            "id": "1"
        }
    }
]

搜尋

  • 使用OBJECT和NESTED內部欄位索引時,與普通欄位索引一致;

  • 使用NESTED內部欄位進行過濾時,需要在config子句中增加sub_doc:groupsub_doc:flat

  • 使用NESTED內部欄位進行排序時,需要在config子句中增加sub_doc:flat

樣本:

query=json_nested_job:'其他'&&filter=json_nested_ssn="abc"&&sort=json_nested_ssn;-RANK&&config=sub_doc:flat
說明

sub_doc:flat模式相比sub_doc:group效能稍差。