Python Elasticsearch:如何处理非常长的查询字符串

时间:2019-10-30 10:14:48

标签: python elasticsearch

考虑以下示例:

NUMBER_KEYWORDS = 3000
es = Elasticsearch("127.0.0.1",port=9200,timeout=120,index="example_index",http_auth=AUTH)
query = {'query': {"bool": { "should": [{"match": {"value.keyword": v}} for v in ["keyword" for i in range(NUMBER_KEYWORDS)]]}}}
es.search(index="example_index", body=query, size=10000)['hits']['hits']

这失败,并带有以下异常:

RequestError(400, 'search_phase_execution_exception', 'failed to create query: [...]

如果我将NUMBER_KEYWORDS关键字设置为较小的数字(例如1000),它不会失败。

在Elasticsearch python接口中处理非常大的查询字符串的好方法是什么?

1 个答案:

答案 0 :(得分:0)

Lucene的布尔条件限制为1024。

您必须更改index.query.bool.max_clause_count值。

但是,您真的确定必须提出这样的请求吗?最好使用数组或文本作为示例并与之匹配。