我正在使用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')
但另一半时间我得到了有效的结果?!有什么想法吗?
答案 0 :(得分:2)
这可能是你死的主人之一。您应该尝试将host_list
限制为HOST3
并重试,然后将host_list
限制为仅HOST4
并重试。您将立即看到您的某个主机是否已关闭。