Подсчет количества документов с использованием Elasticsearch

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

  • Прямой count

    POST my_index/_count

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

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

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

Мои вопросы:

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

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

Ответы

Ответ 1

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

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

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

  • индексировать некоторые документы
  • обновить индекс

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

Ответ 2

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

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

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

Ответ 3

curl http://localhost:9200/_cat/indices?v предоставляет вам счет и другую информацию в табличном формате

health status index                              uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   logstash-2019.10.09-000001         IS7HBUgRRzO7Rn1puBFUIQ   1   1          0            0       283b           283b
green  open   .kibana_task_manager_1             e4zZcF9wSQGFHB_lzTszrg   1   0          2            0     12.5kb         12.5kb
yellow open   metricbeat-7.4.0-2019.10.09-000001 h_CWzZHcRsakxgyC36-HTg   1   1       6118            0      2.2mb          2.2mb
green  open   .apm-agent-configuration           J6wkUr2CQAC5kF8-eX30jw   1   0          0            0       283b           283b
green  open   .kibana_2                          W2ZETPygS8a83-Xcd6t44Q   1   0       1836           23      1.1mb          1.1mb
green  open   .kibana_1                          IrBlKqO0Swa6_HnVRYEwkQ   1   0          8            0    208.8kb        208.8kb
yellow open   filebeat-7.4.0-2019.10.09-000001   xSd2JdwVR1C9Ahz2SQV9NA   1   1          0            0       283b           283b
green  open   .tasks                             0ZzzrOq0RguMhyIbYH_JKw   1   0          1            0      6.3kb          6.3kb