欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Elasticsearch——Arrays字段类型

程序员文章站 2022-07-09 15:37:55
...

在Elasticsearch中,没有专用的数组数据类型。默认情况下,任何字段都可以包含零个或多个值,但是,数组中的所有值必须是相同的数据类型。例如:

  • an array of strings: [ "one""two" ]
  • an array of integers: [ 12 ]
  • an array of arrays: [ 1, [ 23 ]] which is the equivalent of [ 123 ]
  • an array of objects: [ { "name": "Mary", "age": 12 }{ "name": "John", "age": 10 }]

Arrays of objects

对象数组不能像预期的那样工作:不能独立于数组中的其他对象查询每个对象。如果需要能够做到这一点,那么应该使用嵌套数据类型(nested)而不是对象数据(object)类型。

动态添加字段时,数组中的第一个值确定字段类型。所有后续值必须具有相同的数据类型,或者至少可以将后续值强制为相同的数据类型。

不支持混合数据类型的数组:[10,“某些字符串”]

数组可能包含空值,这些值被配置的空值替换或完全跳过。空数组[]被视为缺少字段 — 没有值的字段。

要在文档中使用数组,无需预先配置任何内容,它们受到开箱即用的支持:

PUT my-index-000001/_doc/1
{
  "message": "some arrays in this document...",
  "tags":  [ "elasticsearch", "wow" ],  (1)
  "lists": [ (2)
    {
      "name": "prog_list",
      "description": "programming list"
    },
    {
      "name": "cool_list",
      "description": "cool stuff list"
    }
  ]
}


PUT my-index-000001/_doc/2  (3)
{
  "message": "no arrays in this document...",
  "tags":  "elasticsearch",
  "lists": {
    "name": "prog_list",
    "description": "programming list"
  }
}

GET my-index-000001/_search
{
  "query": {
    "match": {
      "tags": "elasticsearch"  (4)
    }
  }
}




(1)标记字段作为字符串字段动态添加。

(2)列表字段作为对象字段动态添加。

(3)第二个文档不包含数组,但可以索引到相同的字段中。

(4)查询在标记字段中查找elasticsearch,并匹配这两个文档。