ElasticSearch POST с json-поисковым телом против GET с json в URL-адресе

Согласно документации ES, эти 2 запроса поиска должны получить одинаковые результаты:

GET

http://localhost:9200/app/users/_search?source={"query": {"term": {"email":"[email protected]"}}}

POST

http://localhost:9200/app/users/_search

Тело сообщения:

{
    "query":  {
         "term": {
               "email":"[email protected]"
          }
    }
}

Но первый не дает результата, а второй дает мне ожидаемый результат. Я использую ES версию 0.19.10 Кто-нибудь еще имел такое же поведение? Это ошибка?

Ответ 1

source не является допустимым аргументом строки запроса в соответствии с поиском URI

Elasticsearch позволяет выполнить поиск тремя способами...

ПОЛУЧИТЬ с телом запроса:

curl -XGET "http://localhost:9200/app/users/_search" -d '{
  "query": {
    "term": {
      "email": "[email protected]"
    }
  }
}'

POST с телом запроса:

Поскольку не все клиенты поддерживают GET с телом, POST также допускается.

curl -XPOST "http://localhost:9200/app/users/_search" -d '{
  "query": {
    "term": {
      "email": "[email protected]"
    }
  }
}'

ПОЛУЧИТЬ без тела запроса:

curl -XGET "http://localhost:9200/app/users/_search?q=email:[email protected]"

или (если вы хотите вручную закодировать URL-адрес строки запроса)

curl -XGET "http://localhost:9200/app/users/_search?q=email%3Afoo%40gmail.com"

Ответ 2

URL-адрес должен быть закодирован в первом случае:

http://localhost:9200/app/users/_search?source=%7b%22query%22%3a+%7b%22term%22%3a+%7b%22email%22%3a%22foo%40gmail.com%22%7d%7d%7d