У меня есть документы в ElasticSearch со следующей структурой:
"_source": {
"last_updated": "2017-10-25T18:33:51.434706",
"country": "Italia",
"price": [
"€ 139",
"€ 125",
"€ 120",
"€ 108"
],
"max_occupancy": [
2,
2,
1,
1
],
"type": [
"Type 1",
"Type 1 - (Tag)",
"Type 2",
"Type 2 (Tag)",
],
"availability": [
10,
10,
10,
10
],
"size": [
"26 m²",
"35 m²",
"47 m²",
"31 m²"
]
}
}
По сути, записи сведений разбиты на 5 массивов, а поля одной и той же записи имеют одинаковую позицию индекса в 5 массивах. Как видно из данных примера, есть 5 массивов (цена, max_occupancy, тип, доступность, размер), которые содержат значения, относящиеся к одному и тому же элементу. Я хочу извлечь элемент, у которого поле max_occupancy больше или равно 2 (если нет записи с 2, возьмите 3, если нет 3, возьмите четыре,...), с более низкой ценой, в этом случае запись и поместите результат в новый объект JSON, как показано ниже:
{
"last_updated": "2017-10-25T18:33:51.434706",
"country": "Italia",
"price: ": "€ 125",
"max_occupancy": "2",
"type": "Type 1 - (Tag)",
"availability": 10,
"size": "35 m²"
}
По сути, структура результата должна отображать извлеченную запись (в данном случае это второй индекс всего массива) и добавлять к ней общую информацию (поля: «last_updated», «country»).
Можно ли извлечь такой результат из эластичного поиска? Какой запрос мне нужно выполнить?
Может ли кто-нибудь предложить лучший подход?