2017-02-13 2 views
0

мне нужно, чтобы получить все документы, которые содержат, по меньшей мере, один элемент из списка более чем 1024.Проблем с большим BOOL на elasticsearch

Моего запроса в основном BOOL запрос с должны и minimum_should_match : 1.

Elasticsearch maxClauseCount по умолчанию установлен в 1024. Я попытался установить его на 4096 и конфигурация выглядит нормально:

Я прошу http://myserver:9200/my_index/_settings и получить:

... "query": { "bool": { "max_clause_count": "4096" } } ..., Но если я попытаюсь еще получить TooManyClauses[maxClauseCount is set to 1024] в моих журналах.

1-й вопрос: Почему это противоречиво?

Я прочитал, что для некоторых случаев лучше использовать фильтр вместо большого BOOL:

В общем, я бы рекомендовал, чтобы переписать этот запрос, чтобы использовать термины фильтр вместо булева запроса https://discuss.elastic.co/t/too-many-clauses-maxclausecount-is-set-to-1024/61968

второй вопрос: Как я могу использовать фильтр, чтобы получить ту же логику, что мультипликатор должен BOOL на моем примере? Какой лучший фильтр 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

 Смежные вопросы

  • Нет связанных вопросов^_^