Хобрук: Ваш путь к мастерству в программировании

Невозможно изменить значение maxClauseCount в эластичном поиске

Я использую ES 5.2.0, и во время выполнения некоторого запроса я получил исключение ниже:

 Caused by: NotSerializableExceptionWrapper[too_many_clauses: maxClauseCount is set to 1024]
    at org.apache.lucene.search.BooleanQuery$Builder.add(BooleanQuery.java:125)
    at org.elasticsearch.index.query.BoolQueryBuilder.addBooleanClauses(BoolQueryBuilder.java:449)
    at org.elasticsearch.index.query.BoolQueryBuilder.doToQuery(BoolQueryBuilder.java:418)

Чтобы решить это. Я пытаюсь изменить значение «indices.query.bool.max_clause_count», выполнив запрос ниже

Запрос:

PUT http://localhost:9200/_all/_settings?preserve_existing=true  
{"indices.query.bool.max_clause_count" : "100000"}

Ответ:

{
  "error": {
    "root_cause": [
      {
        "type": "remote_transport_exception",
        "reason": "[06LrSZC][localhost:9300][indices:admin/settings/update]"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "unknown setting [index.indices.query.bool.max_clause_count] please check that any required plugins are installed, or check the breaking changes documentation for removed settings"
  },
  "status": 400
}

Ссылки, которые я использовал для решения, но не мог:

https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_settings_changes.html#_search_settings

https://discuss.elastic.co/t/5-0-0-alpha2-how-to-set-index-query-bool-max-clause-count/49816

https://github.com/elastic/elasticsearch/pull/18341

Пожалуйста, дайте мне знать правильный запрос JSON для этого.


Ответы:


1

indices.query.bool.max_clause_count — это статический параметр, поэтому вы должны установить его в файле elasticsearch.yml на каждом узле кластера elasticsearch. Необходимо перезапустить кластер.

Обновите файл elasticsearch.yml следующей строкой:

indices.query.bool.max_clause_count: 100000

Примечание. С помощью API можно обновлять только динамические настройки.

11.05.2017

2

Это глобальная настройка, а не первый уровень индекса, и ее место находится в elasticsearch.yml файле:

indices.query.bool.max_clause_count: 10000

Вот почему оно также было переименовано с index (единственное число) на indices (множественное число).

11.05.2017

3

Другой, возможно, лучший способ взглянуть на список — просто уменьшить количество mustNots до одного mustnot с несколькими терминами. Это будет считаться единичным mustNot и не вызовет исключение, что позволит вам сохранить ограничение на количество пунктов, которые могут потребоваться в других местах вашего приложения. Например, приведенный выше код получит список airportCode и «не должен» их по одному.

// adding the blacklisted carriers to the query
BannedAirportCodeCache.instance().getAirportCodes()
    .forEach(airportCode-> boolQueryBuilder.mustNot(QueryBuilders
        .matchQuery("airportcodes.raw", airportCode)));

Принимая во внимание, что приведенный выше код будет делать то же самое, но в одном mustNot, и он не вызовет слишком много клауз

QueryBuilder termsQueryBuilder = QueryBuilders
    .termsQuery("airportcodes.raw", BannedAirportCodeCache.instance().getAirportCodes());
boolQueryBuilder.mustNot(termsQueryBuilder);
08.04.2019
Новые материалы

Почему шаблоны проектирования и почему нет?
Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

Создание дизайна обуви с помощью машинного обучения
Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

GraalVM в 2022 году: итоги года
2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..

Быстрая разработка: волшебный мир больших языковых моделей
РУКОВОДСТВО Быстрая разработка: волшебный мир больших языковых моделей Подход, основанный на данных, для получения наилучшего ответа Искусство и наука Можно ли совместить машинное..

Ускоренный курс по Node Redis
Сегодня мы будем учиться использовать Redis в Node.js, однако я не собираюсь вываливать сюда всю документацию и утомлять вас до смерти. Это руководство для начинающих? — спросите вы. Ну..

Обзор Python для науки о данных и машинного обучения
Python стал наиболее предпочтительным языком программирования среди разработчиков, которые в основном занимаются наукой о данных и машинным обучением. Интуитивно понятные и уникальные функции..

Принудительный сброс состояния компонента React с помощью ключевого свойства
Принудительный сброс состояния компонента React с помощью ключевого свойства Знаете ли вы, что вы можете использовать опору key для принудительного сброса состояния компонента? В..