У меня есть около 20 000 документов, хранящихся в эластичном поиске, размером около 200 КБ каждый.
У меня есть поиск, в котором всего 733 совпадения, я запускаю его, для завершения которого требуется около 50 мс при возврате 10 результатов.
Если я установлю размер 1000, чтобы он возвращал все результаты, поиск занимает 3-5 секунд.
Обычно я вижу, что это происходит потому, что он должен продолжать поиск, пока не найдет их все, что требует дополнительного времени. Однако, возвращая только 10 результатов, поиск по-прежнему показывает всего 733 совпадения, поэтому он уже знает, какие документы должны быть возвращены!
Обратите внимание, что я не возвращаю здесь поле _source, все, что я хочу, это список _ids, поэтому я не могу представить, что ему придется читать какие-либо данные с диска, поскольку все _ids наверняка хранятся в индексах в любом случае.
Я что-то упустил в том, как это работает?
(Мои _ids — это направляющие, которые мы используем внутри).
РЕДАКТИРОВАТЬ: после публикации я повторно проиндексировал два изменения в сопоставлении:
- Установите для _source значение false, чтобы фактические документы не сохранялись.
- Изменен индекс поля, по которому я искал, на not_analyzed.
Это решает проблему, теперь я возвращаю все 733 _ids примерно за 50 мс. Не уверен, какое изменение решило это, хотя. Я возьму один из них и переиндексирую.