Python Elasticsearch,RequestError:TransportError(400,u'search_phase_execution_exception')间歇性地发生。为什么?

时间:2015-12-11 16:13:35

标签: python elasticsearch

我正在使用Python Elasticsearch在elasticsearch(v.1.7)集群上运行基本过滤器。令人惊讶的是,我可以重复运行完全相同的代码,并且成功查询大约1/2的时间,并在大约1/2的时间内收到TransportError 400。我想知道这个原因是我的语法,还是我无法控制的。

from elasticsearch import Elasticsearch    
host_list = [HOST3, HOST4]
client = Elasticsearch(hosts = host_list, timeout = 120)
q = {"from" : 0, 
            "size" : 0,
            "query": {
              "filtered": {
                "filter": {
                  "bool": {
                    "should": [
                      {"term": {
                        "field1": ["value1"]
                      }}, 
                      {"term": {
                        "field2": ["value2"]
                      }}
                    ],
                  "must": [
                    {"range": {
                      "times": {
                        "gte": "2015-04-21T00:00:00Z",
                        "lte": "2015-04-22T00:00:00Z"
                      }
                    }}
                  ]
                  }
                }
              }
            }}
res = client.search(index = "index_name", doc_type = ("doc_type_name"), body = q)

返回

RequestError               Traceback (most recent call last)
--> 265         res = client.search(...)
(omitting long traceback through ES module code) 
RequestError: TransportError(400, u'search_phase_execution_exception')

但另一半时间我得到了有效的结果?!有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这可能是你死的主人之一。您应该尝试将host_list限制为HOST3并重试,然后将host_list限制为仅HOST4并重试。您将立即看到您的某个主机是否已关闭。