数组类型 - Array

在Elasticsearch中,没有专门的数组(Array)数据类型。但是,在默认情况下,任意一个字段都可以包含0或多个值,这意味着每个字段默认都是数组类型,只不过,数组类型的各个元素值的数据类型必须相同。

在ElasticSearch中,数组是开箱即用的(out of box),不需要进行任何配置,就可以直接使用。

例如,tags字段类型是Text,我们同时可以往里面存放数组:

image-20220709195228301


数组类型的各个元素值的数据类型必须相同, 如果连强制类型转换都进行不了就会报错:

image-20220709195424561


使用Analyzer API测试

传入一个字符串数组给标准分析器:

POST /_analyze
{
  "text": ["hello world", "hello pingfan"],
  "analyzer": "standard"
}

标准分析器将它摊平成了四个单词:

image-20220716214721392

所以"text": ["hello world", "hello pingfan"]其实等价于"hello world hello pingfan"

嵌套数据类型

在第四节我们也提到了嵌套数据类型,这里再结合本节回顾下。

嵌套数据类型是对象数据类型的特殊版本,它允许对象数组中的各个对象被索引,数组中的各个对象之间保持独立,能够对每一个文档进行单独查询,这就意味着,嵌套数据类型保留文档的内部之间的关联,ElasticSearch引擎内部使用不同的方式处理嵌套数据类型和对象数组的方式,对于嵌套数据类型,ElasticSearch把数组中的每一个嵌套文档(Nested Document)索引为单个文档,这些文档是隐藏(Hidden)的,文档之间是相互独立的,但是,保留文档的内部字段之间的关联,使用嵌套查询(Nested Query)能够独立于其他文档而去查询单个文档。在创建嵌套数据类型的字段时,需要设置字段的type属性为nested。