行業演算法版支援OBJECT和NESTED兩種複合資料型別,允許將多個欄位組合在一起,形成嵌套結構。正確使用複合資料型別,能提升查詢準確性,避免錯誤匹配,讓複雜資料管理更高效。
使用須知
在資料格式層面,OBJECT與NESTED接收相同結構的JSON資料,且基礎配置方法相似。但二者在查詢行為上有本質區別:NESTED保持對象邊界完整性,而 OBJECT會扁平化資料。
類型 | OBJECT | NESTED |
底層儲存方式 | 扁平化(Flattened)儲存,丟失對象邊界。 | 採用主子文檔隔離儲存區 (Isolated Storage),保留對象完整性。 |
查詢語義 | 可能出現跨對象匹配情況,但是效能更優。 可以匹配到 Alice(30歲)和 Bob(25歲)的不同user對象。 | 嚴格限制為同一個對象。 只能匹配 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類型為例,欄位整體作為一個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:group或sub_doc:flat;使用NESTED內部欄位進行排序時,需要在config子句中增加
sub_doc:flat。
樣本:
query=json_nested_job:'其他'&&filter=json_nested_ssn="abc"&&sort=json_nested_ssn;-RANK&&config=sub_doc:flatsub_doc:flat模式相比sub_doc:group效能稍差。