适用场景
OBJECT类型主要用于存储嵌套的结构化数据,比如对象。它允许将多个字段组合在一起,形成一个嵌套的结构。这在处理复杂数据时尤为适用,比如用户信息、订单详情等。通过合理使用OBJECT类型,可以更有效地管理和查询复杂、嵌套的数据结构,提升搜索和分析的效率。
配置步骤
您可参考快速入门购买实例以及配置集群,在配置索引结构步骤中,在目标字段选择OBJECT字段类型,会出现配置schema入口,点击后输入配置schema的完整JSON并保存。
用户object schema配置示例
{
"fields": {
"age": {
"analyzer": "",
"field_type": "INTEGER",
"multi_value": false,
"index_type": "NUMBER"
},
"name": {
"analyzer": "",
"field_type": "STRING",
"multi_value": false,
"index_type": "STRING"
},
"tags": {
"fields": {
"k1": {
"analyzer": "",
"field_type": "STRING",
"multi_value": false,
"index_type": "STRING"
},
"k2": {
"analyzer": "",
"field_type": "STRING",
"multi_value": false,
"index_type": "STRING"
}
},
"is_nested": true
}
},
"is_nested": true
}
analyzer:分词器,可选;可参考支持的分析器。
field_type:字段基本类型,必选,不能为空。详情请参见召回引擎版内置字段类型。
multi_value:表明该field为多值,可选,默认是false;如果非nested字段,忽略原来的值,均为true。
is_attribute:可选,默认为true。
index_type:索引类型,可选,不支持pack类型。详情请参见倒排索引类型。
is_nested:可选,默认为false。需要独立存储设置为true。
OBJECT类型字段:
不支持设为主键。
不支持配置分析方式。
不支持多值。
所有类型的索引,包含字段都剔除掉OBJECT类型。
用户源数据示例
全量
JSON格式
{ "className": "c1", "students": [{ "age": 6, "name": "s1", "tags": [{ "k1": "v1", "k2": "v2" }, { "k1": "v11", "k2": "v22" }] }] }
ha3格式
CMD=add^_ className=c1^_ students=[{"age":6,"name":"s1","tags":[{"k1":"v1","k2":"v2"},{"k1":"v11","k2":"v22"}]}]^_ ^^
实时
[ { "cmd": "add", "fields": { "className": "c1", "students": "[{\"age\":6,\"name\":\"s1\",\"tags\":[{\"k1\":\"v1\",\"k2\":\"v2\"},{\"k1\":\"v11\",\"k2\":\"v22\"}]}]" } } ]
查询示例
完成表配置后在功能扩展->查询测试中进行查询。
OBJECT内部字段使用,从根节点到开始以 _ 拼接而成,字段名和索引名相同。
示例1
查询条件:className为c1,students -> tags -> k1 为v1,students -> tags -> k2为v22
查询语句:query=className:c1 AND students_tags_k1:v1 AND students_tags_k2:v22
查询结果:由于是独立存储,query查询结果为空。
示例2
查询条件:className为c1,students -> tags -> k1 为v1,students -> tags -> k2为v2
查询语句:query=className:c1 AND students_tags_k1:v1 AND students_tags_k2:v2
查询结果:query查询结果返回c1的相关信息。
{
...
"className": "c1",
"students": "[{\"age\":6,\"name\":\"s1\",\"tags\":[{\"k1\":\"v1\",\"k2\":\"v2\"},{\"k1\":\"v11\",\"k2\":\"v22\"}]}]"
....
}