In Elasticsearch, there is no dedicated array
datatype. Any field can contain
zero or more values by default, however, all values in the array must be of the
same datatype. For instance:
-
an array of strings: [
"one"
,"two"
] -
an array of integers: [
1
,2
] -
an array of arrays: [
1
, [2
,3
]] which is the equivalent of [1
,2
,3
] -
an array of objects: [
{ "name": "Mary", "age": 12 }
,{ "name": "John", "age": 10 }
]
When adding a field dynamically, the first value in the array determines the
field type
. All subsequent values must be of the same datatype or it must
at least be possible to coerce subsequent values to the same
datatype.
Arrays with a mixture of datatypes are not supported: [ 10
, "some string"
]
An array may contain null
values, which are either replaced by the
configured null_value
or skipped entirely. An empty array
[]
is treated as a missing field — a field with no values.
Nothing needs to be pre-configured in order to use arrays in documents, they are supported out of the box:
PUT my_index/_doc/1 { "message": "some arrays in this document...", "tags": [ "elasticsearch", "wow" ], "lists": [ { "name": "prog_list", "description": "programming list" }, { "name": "cool_list", "description": "cool stuff list" } ] } PUT my_index/_doc/2 { "message": "no arrays in this document...", "tags": "elasticsearch", "lists": { "name": "prog_list", "description": "programming list" } } GET my_index/_search { "query": { "match": { "tags": "elasticsearch" } } }