Запрос ElasticSearch must_not возвращает счетчик = 1, а не 0 - PullRequest
0 голосов
/ 21 марта 2019

Я нашел некоторое описание о must_not в official document

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

Он сказал мне, что must_not вернет оценку 0 простокак операция filter.Но когда я выполняю этот запрос:

GET /my_idx/my_type/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"match" : {"name": "Test"}}
      ]
    }
  }
}

, ответ показывает:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 6,
    "max_score": 1,
    "hits": [
      {
        "_index": "my_idx",
        "_type": "my_type",
        "_id": "Nbs5nmkBAfzcjFMf2czR",
        "_score": 1,
        "_source": {
          "analyzer": "my_tokenizer",
          "text": "Doe"
        }
      },
...

Как вы можете видеть "_score": 1

Почему это так?

1 Ответ

0 голосов
/ 21 марта 2019

Когда в фильтре есть только must_not, присутствует невидимый match_all.Вот почему вы получили _score = 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...