Я делаю function_score
запросов в elastic search
.
Значения ускорения запроса определяются нерегулярно (и различаются для разных пользователей).Кроме того, запрашиваемые термины будут отличаться между пользователями в зависимости от контекста.Пример запроса может выглядеть следующим образом:
{
"query": {
"function_score": {
"filter": {
"term": { "in_stock": true },
... more filters ...
},
"functions": [
{
"filter": { "term": { "color": "red" }},
"weight": 2
},
{
"filter": { "term": { "style": "elegant" }},
"weight": 1
},
{
"filter": { "term": { "length": "long" }},
"weight": 3
}
],
"score_mode": "sum",
}
}
}
The document is simple and looks along the lines of:
{
"product_id" : "abc",
"name" : "blah blah",
"price" : 10
"in_stock" : true,
"color: "red",
"style" : "elegant",
"length" : "long",
... more attributes...
}
типы отображений отфильтрованных терминов: keywords
и boolean
.Никуда ничего не делать.
Производительность запросов будет разумной, пока размер индекса не станет большим (около 1 миллиона документов в индексе).На этом этапе выполнение запроса займет несколько секунд.
Конфигурация индекса:
Я поиграл с ограничением размера шарда, в настоящее время количество шардов ограничено 1 миллионом элементов, потому что после этогопроизводительность кажется еще хуже.Репликация на 5. Индекс только для чтения.
Поскольку весовые коэффициенты и термины будут различаться в разных запросах, я не уверен, возможно ли предварительно отсортировать индекс таким образом, чтобы ускорить запрос.
IЯ не уверен, как / если эластичный поиск может кэшировать результаты, оценку и порядок в случае взвешенных запросов.