Elasticsearch намного медленнее при возврате всех результатов

У меня есть около 20 000 документов, хранящихся в эластичном поиске, размером около 200 КБ каждый.

У меня есть поиск, в котором всего 733 совпадения, я запускаю его, для завершения которого требуется около 50 мс при возврате 10 результатов.

Если я установлю размер 1000, чтобы он возвращал все результаты, поиск занимает 3-5 секунд.

Обычно я вижу, что это происходит потому, что он должен продолжать поиск, пока не найдет их все, что требует дополнительного времени. Однако, возвращая только 10 результатов, поиск по-прежнему показывает всего 733 совпадения, поэтому он уже знает, какие документы должны быть возвращены!

Обратите внимание, что я не возвращаю здесь поле _source, все, что я хочу, это список _ids, поэтому я не могу представить, что ему придется читать какие-либо данные с диска, поскольку все _ids наверняка хранятся в индексах в любом случае.

Я что-то упустил в том, как это работает?

(Мои _ids — это направляющие, которые мы используем внутри).

РЕДАКТИРОВАТЬ: после публикации я повторно проиндексировал два изменения в сопоставлении:

  • Установите для _source значение false, чтобы фактические документы не сохранялись.
  • Изменен индекс поля, по которому я искал, на not_analyzed.

Это решает проблему, теперь я возвращаю все 733 _ids примерно за 50 мс. Не уверен, какое изменение решило это, хотя. Я возьму один из них и переиндексирую.


person user3432422    schedule 18.03.2014    source источник


Ответы (1)


Это займет это время. Потому что ему нужно получить все данные из ES и рассчитать оценку для вашего запроса. Попробуйте 1) установить не анализируемые поля, в которых вы не выполняете поиск. 2) измените тип хранилища ES с simplfs на mmaps.. (упомяните «index.store.type: mmaps» в elasticsearch.yml..) 3) настройте меньше shard как можно больше.. Shard more должен быть равен, чтобы перемещаться по узлам, которые вы собираетесь использовать..

person BlackPOP    schedule 18.03.2014