Массивы
В Elasticsearch нет специального array типа данных. По умолчанию любое поле может содержать ноль или более значений, однако все значения в массиве должны быть одного типа данных. Например:
- массив строк: [
"one","two"] - массив целых чисел: [
1,2] - массив массивов: [
1, [2,3]] что эквивалентно [1,2,3] - массив объектов: [
{ "name": "Mary", "age": 12 },{ "name": "John", "age": 10 }]
Массивы объектов
Массивы объектов работают не так, как ожидается: нельзя запросить каждый объект независимо от других объектов в массиве. Если вам нужно сделать это, то вместо типа данных object следует использовать тип данных nested.
Более подробное объяснение содержится в разделе Вложенные поля.
При динамическом добавлении поля первое значение в массиве определяет type поля. Все последующие значения должны быть того же типа данных или должно быть возможно привести последующие значения к одному типу данных.
Массивы с различными типами данных не поддерживаются: [ 10, "some string" ]
Массив может содержать null значения, которые либо заменяются наконфигурированное null_value, либо пропускаются. Пустой массив [] рассматривается как отсутствующее поле — поле без значений.
Для использования массивов в документах ничего предварительно настраивать не нужно, они поддерживаются по умолчанию:
PUT my-index-000001/_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-000001/_doc/2
{
"message": "no arrays in this document...",
"tags": "elasticsearch",
"lists": {
"name": "prog_list",
"description": "programming list"
}
}
GET my-index-000001/_search
{
"query": {
"match": {
"tags": "elasticsearch"
}
}
} | Поле | |
| Поле | |
| Второй документ не содержит массивов, но может быть индексирован в те же поля. | |
| Запрос ищет |
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/array.html