эластичный поиск function_score запроса производительности - PullRequest
0 голосов
/ 12 июня 2018

Я делаю 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Я не уверен, как / если эластичный поиск может кэшировать результаты, оценку и порядок в случае взвешенных запросов.

...