我的文档有很多种语言,我遵循这种模式:One index per language。他们建议用
搜索所有指数/blogs-*/post/_count
图案。对于我的情况,我正在计算我有多少文档的索引。我正在同时运行我的代码,因此同时发出许多请求。如果我搜索
/blogs-en/post/_count
或任何其他语言然后一切都很好。但是,如果我搜索
/blogs-*/post/_count
我很快就会遇到:
"Error 429 (Too Many Requests): [reduce] [type=reduce_search_phase_exception]
"
有解决方法吗?无论我是否使用
,都会发出相同数量的请求/blogs-en/post/_count or /blogs-*/post/_count.
我在代码中总是使用相同数量的worker,但是重新安排索引以使每种语言有一个索引突然破坏了我的代码。
编辑:当我启动程序时,这是一个没有任何文档的全新索引,当我收到错误时,我有大约5,000个文档,所以没有任何重载。编辑:我正在使用上面引用的链接中找到的映射,并在具有ES的所有默认值的本地计算机上运行...在我的情况下,shards = 5,replicas = 1。我真的只是关注链接中的示例。
编辑:看到的错误只有13-20个请求,我知道ES可以处理更多。搜索/ blogs -en / post / _count而不是/ blogs - * / post / _count等...可以轻松处理数千个没有错误。
另一个编辑:我删除了所有并发,但在收到错误之前仍然只能访问40-50个请求。
答案 0 :(得分:1)
我没有收到该请求的错误,它返回了总文件
你的集群是否处于负载状态?
无论如何,使用简单聚合,您可以在hits.total
中获得总文档数,并在结果的count_per_index
部分中获得每个索引文档数:
GET /blogs-*/post/_search
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"count_per_index": {
"terms": {
"field": "_index"
}
}
}
}