Ответ
Nested поля в Elasticsearch позволяют индексировать массивы объектов как отдельные документы внутри основного документа. Это решает проблему "плоского" хранения, когда элементы массива теряют свою индивидуальность при индексации.
Основные особенности:
- Каждый объект в массиве индексируется как скрытый отдельный документ
- Сохраняются связи между полями внутри одного объекта массива
- Для поиска по nested полям нужно использовать специальный
nestedquery
Пример:
PUT /products
{
"mappings": {
"properties": {
"reviews": {
"type": "nested"
}
}
}
}
Запрос к nested полю:
GET /products/_search
{
"query": {
"nested": {
"path": "reviews",
"query": {
"bool": {
"must": [
{ "match": { "reviews.author": "John" }},
{ "range": { "reviews.rating": { "gte": 4 }}}
]
}
}
}
}
}