我正在使用ElasticSearch(2.4)和官方Python客户端进行简单查询。我的代码如下:
from elasticsearch import Elasticsearch
es_client = Elasticsearch("localhost:9200")
index = "indexName"
doc_type = "docType"
def search(query, search_size):
body = {
"fields": ["title"],
"size": search_size,
"query": {
"query_string": {
"fields": ["file.content"],
"query": query
}
}
}
response = es_client.search(index=index, doc_type=doc_type, body=body)
return response["hits"]["hits"]
search("python", 10) # Works fine.
问题出现在我的查询中包含不平衡的括号或方括号时。例如,使用search("python {programming", 10)
,ES会抛出:
elasticsearch.exceptions.RequestError: TransportError(400, u'search_phase_execution_exception', u'Failed to parse query [python {programming}]')
这是ES预期的行为吗?它不使用分词器来删除所有这些字符吗?
注意:我在使用Java时也遇到了这个问题。
re.sub('(\+|\-|\=|&&|\|\||\>|\<|\!|\(|\)|\{|\}|\[|\]|\^|"|~|\*|\?|\:|\\\|\/)', '\\\\\\1', query)
- Mike A.