Лучший способ оптимизировать запросы ElasticSearch с помощью предложения sort

#elasticsearch #query-optimization #real-time #bigdata

#elasticsearch #оптимизация запросов #в режиме реального времени #bigdata

Вопрос:

У нас есть огромный индекс — с миллиардами документов — в нашем кластере из 5 узлов, который выполняет различные запросы в сопоставлении родитель-потомок.

Когда мы используем предложение sort , большинство этих запросов обычно теряют время ожидания или навсегда зависают в этом конкретном огромном индексе.

Я думал использовать какой-то кеш, который хранит первый результат, затем сортирует его или даже использует какой-нибудь «инструмент масштабируемых заданий», такой как Apache Spark, но добавит дополнительную сложность в нашу инфраструктуру.

У кого-нибудь есть такой вариант использования, который может помочь с некоторыми идеями?

Редактировать:

По сути, у нас есть 2 типа, user и event именно поэтому мы моделируем как родительский / дочерний — events имеем огромную пропускную способность. Обычно мы сортируем по некоторому custom_data или другому полю вложенного документа, например revenue .

Это отображение этих 2 типов:

https://gist.github.com/allansene/5e1e1743b5cbdbd337a19b066fbe8e9b

Ниже приведен пример запроса. Без какого-либо предложения сортировки потребовалось 51 сек:

     {
      "query": {
        "filtered": {
          "filter": {
            "and": {
              "filters": [{
                "has_child": {
                  "type": "event",
                  "filter": {
                    "term": {
                      "action": "acessou-pagamento"
                    }
                  }
                }
              }, {
                "not": {
                  "filter": {
                    "has_child": {
                      "type": "action",
                      "filter": {
                        "and": {
                          "filters": [{
                            "term": {
                              "action": "comprou-ingresso"
                            }
                          }, {
                            "range": {
                              "updated_at.date": {
                                "gte": "2016-10-23||/d"
                              }
                            }
                          }]
                        }
                      }
                    }
                  }
                }
              }]
            }
          }
        }
      }
    }
  

Комментарии:

1. Какое предложение sort вы используете? Можете ли вы привести несколько примеров?

2. @Val я только что добавил еще немного информации выше…