ES - 處理TooManyClause異常

一、TooManyClauseelasticsearch

咱們在使用terms query、prefix query、fuzzy query、wildcard query、range query的時候,一不當心就會遇到TooManyClause異常。這個異常是提醒咱們查詢子句太多了(超過默認閾值1024),而上面這類查詢最終都會解析成BooleanQuery。例如:prefix query前綴匹配t*,解析後會將字典中全部以t開頭的term所有匹配出來,而後用OR鏈接構成一個BooleanQuery。這種狀況下就很容易發生TooManyClause異常。性能

 

二、處理方案this

ES默認設置一個查詢語句最多1024個子句,主要是對內存和性能的保障,若是遇到這個異常咱們應該如何處理?排序

2.1 從業務角度控制查詢語句的「規模」內存

例如拼接大量的OR查詢子句,從業務角度進行縮減。get

2.2 用filter替換queryast

terms query -> terms filter配置

prefix query -> prefix filter查詢

fuzzy query -> N/A異常

wildcard query -> N/A

range query -> range filter

2.3 使用filter沒有相關性得分,若是有相關性排序的需求,就得修改ES的默認配置

indices.query.bool.max_clause_count: 5000

 

參考:

Setting the BooleanQuery maxClauseCount in ElasticSearch

相關文章
相關標籤/搜索