- Бизнес-требования: в нашем приложении нам нужно разрешить сортировку (как по возрастанию, так и по убыванию) по нескольким полям вместе с поиском.Мы используем разбиение на страницы для отображения данных только для одной страницы, размер страницы составляет
- Поля. Все поля, для которых включена сортировка, имеют тип Дата.Даты сохраняются как длинные.
Проблема: Elasticsearch возвращает результат довольно быстро, когда количество отфильтрованных записей очень мало (скажем, 20), но если количество отфильтрованных записей очень велико (скажем, 2K)время поиска увеличивается до 1 секунды.Производительность ухудшается еще больше с увеличением нагрузки.
PFB характеристики индекса.
Размер осколка: 5
- Количествореплики: 0
- Интервал обновления: 1 с
- Общее количество проиндексированных документов: 20 КБ
- Размер индекса: 10 МБ
- Размер кучи JVM: 2 ГБ
В настоящее время мы очищаем индекс и выполняем массовый индекс данных для индекса ежедневно в нерабочее время.
Я читал о сортировке индекса здесь , но мне нужно добитьсято же самое с Java API или Spring Data Elasticsearch, и я не нашел никакой документации для этого.Кроме того, «sort.field» не может быть обновлен после создания индекса, и, поскольку для него требуется имя поля, в индексе должно быть сопоставление.
Существует ли способ выполнить сортировку по немногимполя быстрее.Кроме того, поскольку число / размер записей значительно меньше, есть ли способ заставить эластичный поиск хранить все записи в памяти для увеличения скорости поиска / сортировки.