支持JSON格式字段类型(OBJECT类型)

适用场景

OBJECT类型主要用于存储嵌套的结构化数据,比如对象。它允许将多个字段组合在一起,形成一个嵌套的结构。这在处理复杂数据时尤为适用,比如用户信息、订单详情等。通过合理使用OBJECT类型,可以更有效地管理和查询复杂、嵌套的数据结构,提升搜索和分析的效率。

配置步骤

您可参考快速入门购买实例以及配置集群,在配置索引结构步骤中,在目标字段选择OBJECT字段类型,会出现配置schema入口,点击后输入配置schema的完整JSON并保存。

image

用户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
}
  1. analyzer:分词器,可选;可参考支持的分析器

  2. field_type:字段基本类型,必选,不能为空。详情请参见召回引擎版内置字段类型

  3. multi_value:表明该field为多值,可选,默认是false;如果非nested字段,忽略原来的值,均为true。

  4. is_attribute:可选,默认为true。

  5. index_type:索引类型,可选,不支持pack类型。详情请参见倒排索引类型

  6. is_nested:可选,默认为false。需要独立存储设置为true。

说明

OBJECT类型字段:

  1. 不支持设为主键。

  2. 不支持配置分析方式。

  3. 不支持多值。

  4. 所有类型的索引,包含字段都剔除掉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\"}]}]"
            }
        }
    ] 

查询示例

完成表配置后在功能扩展->查询测试中进行查询。

image

OBJECT内部字段使用,从根节点到开始以 _ 拼接而成,字段名索引名相同。

示例1

查询条件:classNamec1,students -> tags -> k1 为v1,students -> tags -> k2v22

查询语句:query=className:c1 AND students_tags_k1:v1 AND students_tags_k2:v22

查询结果:由于是独立存储,query查询结果为空。

示例2

查询条件:classNamec1,students -> tags -> k1 为v1,students -> tags -> k2v2

查询语句: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\"}]}]"
             ....
          }