Почему POST, а не GET в пользовательском интерфейсе головы elasticsearch любого запроса

У меня была аналогичная проблема, как здесь.

Я выполнял следующий запрос в головном плагине, любая вкладка запроса (с конечной точкой _search и GET):

{
    "query": {
    "match": {
    "body": "mulla"
}}}

все мои документы были хитом, и все они имели оценку 1, а объяснение говорило что-то вроде ConstantScore(*:*).

В связанном вопросе кто-то ответил, что вы должны обязательно использовать POST, а не GET, который работает, как и ожидалось (возвращая подмножество всех документов с разными оценками). Каков мой вопрос, почему POST, а не GET? Сопоставимые примеры в руководстве по поиску эластичных материалов говорят об использовании GET.

Также, если я запускаю тот же запрос с помощью curl:

curl -i -XGET 'http://localhost:9200/dagb/_search' -d '
{
"query": {
"match": {
"body": "mulla"
 }}}'

Он работает, как и ожидалось, выдавая те же оценки и документы, что и запрос POST, в плагине head. Кроме того, я только что проверил, версия curl с -XPOST также работает.


person sandro scodelller    schedule 06.02.2015    source источник


Ответы (1)


Используя инструменты разработчика Google Chrome, вы можете увидеть, какой запрос выполняется. Если вы используете плагин head и измените тип запроса с POST на GET, документ json не будет отправлен в качестве тела. Документ json прилагается к запросу. Это не поддерживается elasticsearch. Запрос должен быть отправлен как тело запроса. Используя curl, вы отправляете его как тело. Ниже пример выполненного запроса.

http://localhost:9200/gridshore/_search?{%22query%22:{%22match%22 :{%22content%22:%22cool%22}}}

В конце концов, elasticsearch обрабатывает этот запрос так же, как

http://localhost:9200/gridshore/_search

person Jettro Coenradie    schedule 07.02.2015
comment
Спасибо! Знаете ли вы, есть ли на это причина? Или это просто незначительная ошибка головного плагина (незначительная, если вы это знаете :-)) - person sandro scodelller; 09.02.2015
comment
Нет, извините, единственное, что я знаю, это то, что не все браузеры поддерживают выполнение запроса GET с телом запроса. Так что это может иметь какое-то отношение к этому. - person Jettro Coenradie; 09.02.2015