2014-09-09 9 views
20

Если человек хочет, чтобы подсчитать количество документов в индексе (из Elasticsearch), то есть две возможности (по крайней мере?):Подсчет количества документов с помощью Elasticsearch

  • Прямая count

    POST my_index/_count

    должен вернуть количество документов в my_index.

  • Использование search

    Здесь можно использовать count как search_type или какой-либо другой тип. В любом из случаев, общее количество может быть извлечена из поля ['hits']['total']

Мои вопросы:

  • чем разница между различными подходами? Какой я предпочитаю? ?

  • Я поднимаю этот вопрос, потому что я испытываю разные результаты в зависимости от выбранного метода. Я сейчас в процессе отладки проблема, и этот вопрос возник.

ответ

24

Возможно _count немного быстрее, так как он не должен выполнить полный запрос с рейтинга и результат выборки и может просто вернуть размер.

Было бы интересно узнать немного больше о том, как вам удастся получить разные результаты. Для этого мне нужна дополнительная информация, как точные запросы, которые вы отправляете, и если индексирование индексируется.

Но предположим, что вы сделали следующее индексировать

  1. некоторые документы
  2. обновить индекс

_search и _count (спичкой все запроса) должен возвращать ту же сумму. Если нет, это было бы очень странно.

+0

К сожалению, я не смогу поделиться данными.Кроме того, поскольку проблема не была воспроизводимой на 100%, было бы трудно найти минимальный пример. Вот почему я задал его как общий вопрос. – Dror

+0

не нужны данные, конечно, просто анонимизируйте его. Но реальный запрос + ответ был бы полезен. Без этого будет довольно сложно понять, что вы делаете неправильно. –

+1

Очевидно, _count api устарел в es 2.0 из-за избыточности, учитывая, что вы можете искать с размером = 0 –

2

Два запроса дают тот же результат, но: - подсчет потребляет меньше ресурсов/полосы пропускания, потому что не требует выбор документов, подсчета очков и других внутренних оптимизаций. Установите размер поиска равным 0, может быть очень похожим.

Если вы хотите подсчитать всю запись в индексе, вы также можете выполнить условия агрегации в поле «_type».

Результаты должны быть одинаковыми. Прежде чем сравнивать результаты, обязательно запустите обновление индекса.

+0

Терминология агрегации имеет отверстие в яме с точностью. Вы должны установить большой размер, и он всегда ограничен сверху с помощью 'MAX_INT' ... – Dror

Смежные вопросы