Сортировка медленная на Elasticsearch, когда количество записей после фильтрации велико - PullRequest
0 голосов
/ 13 декабря 2018
  • Бизнес-требования: в нашем приложении нам нужно разрешить сортировку (как по возрастанию, так и по убыванию) по нескольким полям вместе с поиском.Мы используем разбиение на страницы для отображения данных только для одной страницы, размер страницы составляет
  • Поля. Все поля, для которых включена сортировка, имеют тип Дата.Даты сохраняются как длинные.
  • Проблема: Elasticsearch возвращает результат довольно быстро, когда количество отфильтрованных записей очень мало (скажем, 20), но если количество отфильтрованных записей очень велико (скажем, 2K)время поиска увеличивается до 1 секунды.Производительность ухудшается еще больше с увеличением нагрузки.

    PFB характеристики индекса.

  • Размер осколка: 5

  • Количествореплики: 0
  • Интервал обновления: 1 с
  • Общее количество проиндексированных документов: 20 КБ
  • Размер индекса: 10 МБ
  • Размер кучи JVM: 2 ГБ

В настоящее время мы очищаем индекс и выполняем массовый индекс данных для индекса ежедневно в нерабочее время.

Я читал о сортировке индекса здесь , но мне нужно добитьсято же самое с Java API или Spring Data Elasticsearch, и я не нашел никакой документации для этого.Кроме того, «sort.field» не может быть обновлен после создания индекса, и, поскольку для него требуется имя поля, в индексе должно быть сопоставление.

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

...