Передача _type в параметре Query против URL в упругом поиске - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь запросить кластер эластичного поиска.Имя индекса - titles, а _type - title.Когда я добавляю тип в URL-адрес запроса, фильтрация работает должным образом:

POST http://esendpoint.com/titles/title/_search?

Тело:

"query": {
    "filtered": {
      "query": {

        "bool": {
          "should": [
            {  "term" : {"_docTitleIds" : "65d-7ab2-41d4-a928-300accfc8ab7"}}
          ]
        }
      }

    }
  }

Однако, если я добавлю заголовок _type в тело запроса, ине в URL я получаю все результаты по индексу titles.Но при использовании в URL я получаю результаты только от типа title

POST http://esendpoint.com/titles/_search

Тело:

"query": {
        "filtered": {
          "query": {

            "bool": {
              "should": [
                {  "term" : {"_type" : "title"}},
                {  "term" : {"_docTitleIds" : "65d-7ab2-41d4-a928-300accfc8ab7"}}
              ]
            }
          }

        }
      }

Я не могуследите, почему это происходит.

1 Ответ

0 голосов
/ 25 сентября 2019

Вам нужно использовать filter (И) вместо should (ИЛИ):

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "_type": "title"
              }
            },
            {
              "term": {
                "_docTitleIds": "65d-7ab2-41d4-a928-300accfc8ab7"
              }
            }
          ]
        }
      }
    }
  }
}

Запрос ниже для ES 2 и более поздних версий:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "_type": "title"
          }
        },
        {
          "term": {
            "_docTitleIds": "65d-7ab2-41d4-a928-300accfc8ab7"
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...