Как использовать «не» для фильтрации терминов в поиске Elasti c? - PullRequest
0 голосов
/ 17 марта 2020

Я новичок в Elasti c Поиск и не могу найти информацию о том, как использовать not или must_not в качестве фильтра терминов с поиском elasti c.

Мой запрос задан так:

    {
        "size":4,
        "from":0,
        "query":{
            "bool":{
                "filter":[
                    {
                        "term":{
                            "published":1
                        }
                    },
                    {
                        "term":{
                            "brand.keyword":"Honda"
                        }
                    },
                    {
                        "not": {
                            "term": {
                                "tags": "Red"
                            }
                        }
                    },
                    {
                        "wildcard":{
                            "image":"*"
                        }
                    }
                ]
            }
        }
    }

Но когда я тестирую в Почтальоне, я получаю сообщение об ошибке:

 "type": "parsing_exception",
 "reason": "no [query] registered for [not]"

Кто-нибудь знает, как я могу это исправить?

1 Ответ

1 голос
/ 17 марта 2020

Обратите внимание, что предложение filter работает как предложение must. Разница между ними заключается только в том, что любой запрос внутри предложения фильтра не будет влиять на оценку документа или, другими словами, для предложения filter оценка не рассчитывается, тогда как для must, must_not и should оценка будет рассчитана. Это известно как контекст фильтра и контекст запроса .

Теперь, если вы не хотите, чтобы must_not был частью вычисления счета, запрос будет:

{
  "size": 4,
  "from": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "published": 1
          }
        },
        {
          "term": {
            "brand.keyword": "Honda"
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "term": {
                  "tags": "Red"
                }
              }
            ]
          }
        },
        {
          "wildcard": {
            "image": "*"
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...