在聚合和基数搜索等查询中,可能会有超时。
我注意到,当从python客户端执行查询时,响应有时包含:
{
"took":1200184,
"timed_out":true,
"_shards":{
"total":84,
"successful":84,
"failed":0
}
并且返回的结果少于预期。
我的主要问题是,当发生超时时,响应仍然包含许多结果。
在解析响应结果之前,我可以检查超时是否为真,但可能有更好的方法:){... {1}}或like raise an exception
答案 0 :(得分:2)
您可以使用以下方法增加elasticsearch的超时: -
es.search(index="my_index",
doc_type="document",
body=get_req_body(),
request_timeout=30)
默认情况下,分配的值为10.另一方面,如果要捕获异常,则可以使用调度程序并检查已过去的时间,并在超出时间限制时捕获异常。
答案 1 :(得分:0)
Elasticsearch-py客户端有一个可以传递的命名参数,可以让您为搜索请求设置超时值。
但我建议在这种情况下使用滚动来获取结果,它类似于数据库查询的游标。这是一个非常好的example如何使用滚动。使用有限的滚动大小,请求不太可能超时,您将能够获取所有结果而不是接收部分结果。
具有超时参数的示例搜索调用
es.search(index="index", doc_type="doc_type", body=body, timeout=50)