如果你想计算一个索引(Elasticsearch)中的文档数量,那么(至少?)有两种可能:
*直接count
POST我的索引/计数
应返回my_index
中的文档数。
*使用search
在这里,可以使用count
作为search_type
或其他类型。
我的问题是:
- 不同的方法有什么不同?2我应该选择哪一种?
- 我提出这个问题是因为我遇到了不同的结果取决于所选择的方法。我现在正在调试这个问题的过程中,这个问题出现了。
如果你想计算一个索引(Elasticsearch)中的文档数量,那么(至少?)有两种可能:
*直接count
POST我的索引/计数
应返回my_index
中的文档数。
*使用search
在这里,可以使用count
作为search_type
或其他类型。
我的问题是:
6条答案
按热度按时间yptwkmov1#
_count
可能更快一点,因为它不必执行带有排名和结果获取的完整查询,并且可以简单地返回大小。这将是有趣的知道多一点关于你如何管理得到不同的结果虽然。为此,我需要更多的信息,如什么确切的查询,你正在发送,如果任何索引正在进行的索引。
但假设您执行以下操作
1.为某些文档编制索引
1.刷新索引
_search
和_count
(使用match all查询)应该返回相同的总数。如果不是,那就很奇怪了。nkoocmlb2#
如果必须使用
_search
而不是_count
,并且您使用的是Elasticsearch 7.0+,则设置size: 0
和track_total_hits: true
将提供与_count
相同的信息请参阅Elasticsearch 7.0突破性更改
zysjyyx43#
curl http://localhost:9200/_cat/indices?v
以表格格式提供计数和其他信息mkh04yzy4#
老问题,插话,因为在ElasticSearch版本〉7.0:
_search
:返回搜索查询命中计数小于或等于结果窗口大小(通常为10,000)的文档。例如:{“成功”:3,“超时”:假,"碎片”:{“总数”:1,“成功”:1,“跳过”:0,“失败”:0},“命中数”:{“总数”:{“值”:10000,“关系”:“gte”},“最大得分”:0.34027478,【点击次数】:[...]}}
_count
:返回搜索查询的命中总数,而不考虑结果窗口的大小。未返回文档,例如:{“计数”:5703899,"碎片”:{“总数”:1,“成功”:1,“跳过”:0,“失败”:0}}
因此,
_search
可能会返回总命中数10,000(如果这是您配置的结果窗口大小),而_count
将返回同一查询的实际计数。klsxnrf15#
这两个查询提供相同的结果,但:- count消耗较少的资源/带宽,因为不需要提取文档、评分和其他内部优化。将搜索大小设置为0,可能非常相似。
如果你想统计一个索引中的所有记录,你也可以对“_type”字段执行一个聚合条件。
结果应该相同。在比较结果之前,请确保执行索引刷新。
zlwx9yxi6#
如果要逐个检查索引,可以使用以下查询
结果将是下面的屏幕截图。