Elasticsearch 7.0: фильтр должен указывать на ошибку - PullRequest
1 голос
/ 26 апреля 2019

Я использую erasearch-py 7.0 иasticsearch server 7.0 на компьютере с Windows 8.

У меня есть этот запрос:

{
    'size': 10000, 
    'query': {
        'bool': {'must_not': {'filter': [{'term': {'status': 'ok'}}]}
        }
    }
}

Отображение таково:

  "mappings": {
      "properties": {
         "name": {"type": "text"},
         "status": {"type": "keyword"},
         "date": {"type":"date"}
      }
    }

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

RequestError: RequestError (400, «parsing_exception», «нет [запроса], зарегистрированного для [фильтра]»)

Однако, если я удаляю элемент must_not, он работает:

{
    'size': 10000, 
    'query': {
        'bool': {'filter': [{'term': {'status': 'ok'}}]}
    }
}

Что я здесь не так делаю?

1 Ответ

2 голосов
/ 26 апреля 2019

filter

Предложение (запрос) должно появляться в соответствующих документах.Однако, в отличие от этого, оценка запроса будет игнорироваться.Предложения фильтра выполняются в контексте фильтра, это означает, что оценка игнорируется, а предложения рассматриваются для кэширования.

must_not

Предложение (запрос) не должно появляться всоответствующие документы.Предложения выполняются в контексте фильтра, что означает, что оценка игнорируется, а предложения рассматриваются для кэширования.Поскольку оценка игнорируется, возвращается оценка 0 для всех документов.

И filter, и must_not являются предложениями запроса bool и работают одинаково.Для использования must_not необходимо удалить filter:

{
  'size': 10000,
  'query': {
    'bool': {
      'must_not': {
        'term': {
          'status': 'ok'
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...