2017-02-13 33 views
0

大布爾問題我需要包含來自超過1024與elasticsearch

我的查詢清單至少一個項目的所有文件基本上是一個布爾查詢應該minimum_should_match :1

Elasticsearch maxClauseCount默認設置爲1024。我試圖將其設置爲4096,配置看起來是OK:

我要求http://myserver:9200/my_index/_settings並獲得:

... "query": { "bool": { "max_clause_count": "4096" } } ..., 但如果我嘗試仍然得到我的日誌TooManyClauses[maxClauseCount is set to 1024]

1st Question:這是爲什麼矛盾呢?

我已閱讀,對於一些情況下,最好使用過濾器,而不是一個大的布爾的:

一般來說我建議重寫該查詢使用條件過濾器,而不是布爾查詢 https://discuss.elastic.co/t/too-many-clauses-maxclausecount-is-set-to-1024/61968

第二個問題:我怎麼能使用過濾器來獲得相同的邏輯倍數應該bool的在我的例子嗎?什麼是最好的布爾過濾器或過濾器的情況下?

回答

0

我不確定爲什麼Elasticsearch引發maxClauseCount錯誤,但我找到了一種替代方法來構建我的查詢。

(簡單)解決方案是使用條目與大量項目列表。如果我將它用於must,我會得到相同的錯誤,但使用filter時它可以很好地工作。

實施例:

{ 
    "query": { 
    "bool": { 
     "filter": [ 
     {"terms": {"my_field": ["item1", "item2", ... "itemN"]}} 
     ] 
    } 
    } 
} 

唯一缺乏filter在於:

子句(查詢)必須出現在匹配文檔。然而,不像必須的查詢分數將被忽略。 https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-bool-query.html