Мой бизнес-домен - это списки недвижимости, и я пытаюсь создать граненый интерфейс. Поэтому мне нужно сделать агрегации, чтобы узнать, сколько в списках 1 кроватей, 2 кроватей, сколько в этом ценовом диапазоне, сколько с бассейном и т. Д. И т. Д. Довольно стандартные вещи.
В настоящее время моя модель выглядит так:
{
"beds": 1,
"baths": 1,
"price": 100000,
"features": ['pool','aircon'],
"inspections": [{
"startsOn": "2019-01-20"
}]
}
Чтобы построить мой граненый интерфейс, я делаю несколько агрегаций, например:
{
"aggs" : {
"beds" : {
"terms" : { "field" : "beds" }
},
"baths" : {
"terms" : { "field" : "baths" }
},
"features" : {
"terms" : { "field" : "features" }
}
}
}
Вы поняли идею. Если у меня есть 10 полей, я делаю 10 агрегаций.
Но, увидев эту статью , я думаю, что мне следует просто перестроить свою модель, чтобы она была такой:
{
"beds": 1,
"baths": 1,
"price": 100000,
"features": ['pool','aircon'],
"attributes": ['bed_1','bath_1','price_100000-200000','has_pool','has_aircon','has_inspection_tomorrow']
}
Тогда мне нужна только 1 агг:
{
"aggs": {
"attributes": {
"terms": {
"field": "attributes"
}
}
}
}
Итак, у меня есть пара вопросов.
- Является ли недостатком только в этом подходе то, что логика перемещается на клиент? Если это так, я доволен этим - для производительности, так как я не вижу, чтобы эта логика менялась очень часто.
- Могу ли я использовать это поле в моих запросах тоже? Например, что, если я хочу сопоставить все документы с 1 спальней и цена = 100000 и с пулом и т. Д. Запросы условий работают на любом совпадении, но как это сделать? я нахожу документы, где массив значений содержит все предоставленные термины?
В качестве альтернативы, если вы можете придумать лучшую структуру для моделирования скорости поиска, пожалуйста, дайте мне знать!
Спасибо