У меня есть каталог продуктов, в котором каждый продукт проиндексирован следующим образом (запрашивается из http://localhost:9200/products/_doc/1
) в качестве образца:
{
"_index": "products_20201202145032789",
"_type": "_doc",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"title": "Roncato Eglo",
"description": "Amazing LED light made of wood and description continues.",
"price": 3990,
"manufacturer": "Eglo",
"category": [
"Lights",
"Indoor lights"
],
"options": [
{
"title": "Mount type",
"value": "E27"
},
{
"title": "Number of bulps",
"value": "4"
},
{
"title": "Batteries included",
"value": "true"
},
{
"title": "Ligt temperature",
"value": "warm"
},
{
"title": "Material",
"value": "wood"
},
{
"title": "Voltage",
"value": "230"
}
]
}
}
Каждый параметр содержит разные значения, поэтому существует множество значений типа крепления, значений температуры света, значений материалов и т. Д.
Как я могу создать агрегацию (фильтр), где я могу позволить клиентам выбирать между различными вариантами Тип крепления:
[ ] E27
[X] E14
[X] GU10
...
Или позвольте им выбрать один из различных вариантов материала, отображаемых в виде флажков:
[X] Wood
[ ] Metal
[ ] Glass
...
Я могу справиться с этим на веб-интерфейсе, когда будут созданы ведра. Создание разных ведер для этих опций - вот с чем я борюсь.
Я успешно создал, отобразил и использую агрегаты для Категории, Производителя и других основных. Эти параметры продукта хранятся в has_many_through
отношениях в базе данных. Я использую гем Rails + searchkick, но они позволяют мне создавать необработанные запросы для эластичного поиска.