json是数组还是对象(json对象和json数组的结构),本文通过数据整理汇集了json是数组还是对象(json对象和json数组的结构)相关信息,下面一起看看。

在ElasticSearch中,使用JSON结构来存储数据。键/值对是JSON的一个字段,值可以是基本数据类型、数组、文档(也称为对象)或文档数组。因此,每个JSON文档都有一个层次结构。复合数据类型有指数组类型、对象类型和嵌套类型。每种类型的特点如下:数组字段是指一个字段有多个值,每个值都是数组字段的一个元素;元素的类型可以是基本类型或文档类型;Type表示字段的值是一个JSON文档;嵌套字段指的是对象类型的特殊版本,ElasticSearch引擎在内部将嵌套字段索引到单个文档中。如果在嵌套字段中定义了对象数组,那么对象数组中的每个元素(文档)都被索引到单个文档中,并且每个文档都可以被独立地查询。

首先,对象类型

JSON有一个层次结构,一个文档可能包含其他文档。如果一个文档包含其他文档,那么文档值就是对象类型,它的数据类型是“:”对象。ElasticSearch默认将文档的属性类型设置为object,即 键入 : 对象 。

例如,在创建索引映射时,name字段被定义为对象类型,type属性的值不需要显式定义。其默认值为object:

默认情况下,上述文档类型被索引为以点命名的数据结构。分层结构展开后,数据结构由平面键/值对组成:

第二,现成的数组类型

在ElasticSearch中,数组没有特殊的数据类型。但是,默认情况下,任何字段都可以包含0个或多个值,这意味着默认情况下每个字段都是一个数组类型。但是,数组类型的每个元素值的数据类型必须相同。在ElasticSearch中,数组是开箱即用的,不需要任何配置就可以直接使用。

1、数组类型

在同一个数组中,数组元素的数据类型是相同的。ElasticSearch不支持多种数据类型的元素:[10, 一些字符串 ].常用的数组类型有:字符数组:[ ;一 , 二 ]整数数组:productid:[ 1,2]对象(文档)数组: 用户 :[{ ;名称 : 玛丽 , 年龄 :12},{ 名称 : 约翰 , 年龄 :10}],ElasticSearch将对象数组展开为{ 用户名 :[ ;玛丽

对于一个文档数组,每个元素都是一个结构相同的文档,文档之间不是相互独立的。在文档数组中,不可能独立于其他文档来查询单个文档。这是因为文档内部字段之间的关联被移除,所有文档一起形成一个对象数组。

查询整数数组,例如,使用多词查询类型,查询productid为1和2的文档:

2.对象数组

通过PUT动词,自动创建索引和文档类型,并在文档中创建对象数组:

ElasticSearch引擎将对象数组扩展为平面数据结构。在以上示例中展开文档类型的数据结构后,文档数据类似于:

字段user.first和user.last扩展为数组字段。但是,在这种扩展之后,单个文档中字段之间的关联将会丢失。在本例中,展开文档的数据丢失了第一个和最后一个字段之间的关联,例如,Alice和white之间的关联丢失。

第三,嵌套数据类型

嵌套数据类型是对象数据类型的特殊版本,它允许对象数组中的每个对象都被索引,数组中的每个对象都可以针对每个文档被独立查询。这意味着嵌套数据类型保持了文档的内部关系,ElasticSearch引擎使用不同的方式处理嵌套数据类型和对象数组。对于嵌套数据类型,ElasticSearch将数组中的每个嵌套文档索引到单个文档中。这些文档是隐藏的,彼此独立。但是,保持文档内部字段之间的相关性,使用嵌套查询可以独立于其他文档查询单个文档。创建具有嵌套数据类型的字段时,需要将字段的type属性设置为nested。

1、在索引映射中创建嵌套字段

将用户字段设置为嵌套数据类型。因为默认情况下每个字段都可以是数组类型,所以嵌套字段也可以是对象数组。

2.为嵌套字段赋值

如果为嵌套字段分配了多个值,ElasticSearch会自动将字段值转换为数组类型。

在ElasticSearch中,嵌套文档被索引到许多独立的隐藏文档中,这些文档只能通过嵌套查询来访问。每个嵌套文档都是嵌套字段(文档数组)的一个元素。嵌套文档内部字段之间的关联由ElasticSearch引擎保留,而嵌套文档之间是相互独立的。在这个例子中,ElasticSearch使得Alice和White之间的关联被保留,但是John和White之间没有关联。

默认情况下,每个索引最多创建50个嵌套文档,默认限制可以通过索引设置选项来修改:index . mapping . nested _ fields . limit。

第四,嵌套查询

嵌套查询用于查询嵌套对象。执行嵌套查询的条件是嵌套对象被索引到单个文档中,并且查询作用于根文档。嵌套查询由关键字 嵌套 :

1.必须赋值的参数:path参数:指定嵌套字段的文档路径,根路径是顶层文档,嵌套文档的路径由点 。查询参数:对匹配路径(参数path)的嵌套文档执行查询,查询参数指定对嵌套文档执行的查询条件。

2.使用嵌套查询访问嵌套文档

第五,使用C#索引数组类型

1、创建弹性搜索的索引图

对于topics字段,类型是integer,给定一组整数值[1,2,3],那么该字段可以存储数组。

2.创建数据模型。

数组字段定义为列表类型,每个列表项的数据类型为int。

3.为字段赋值。

为列表字段topics赋值,并调用NEST来索引文档。

4.查询数组字段

更多json是数组还是对象(json对象和json数组的结构)相关信息请关注本站。