org.springframework.data.elasticsearch.ElasticsearchException:
Cannot execute jest action , response code : 500 , error :
{
"root_cause": [
{
"type": "too_many_clauses",
"reason": "too_many_clauses: maxClauseCount is set to 1024"
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "dfs",
"grouped": true,
"failed_shards": [
{
"shard": 0,
"index": "test",
"node": "mX6IENzdRwCEhOwAsvJlmQ",
"reason": {
"type": "too_many_clauses",
"reason": "too_many_clauses: maxClauseCount is set to 1024"
}
}
]
}
, message : null
问题原因:
bool 查询拼接太多了,有一个拼接上限,es默认设置为1024
解决方法:
方案一:当超过1024时可以将一个bool查询拆成两个子bool查询,使用must关键字,使得两个子bool查询是与的关系
方案二:编辑elasticsearch.yml,添加如下配置
index.query.bool.max_clause_count: 10240
注意:必须在最前面添加一个空格,即和其他配置首字母对齐,不然es启动报错。
方案三:由于索引分词使用了同义词,可以将查询分词和索引分词分开,单独设置查询分词