Установите заголовок Content-type для клиента Elasticsearch-php - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь использовать Elasticsearch-php версии 5.0 для отправки поисковых запросов в Elasticsearch 6.4.2.

Одно из критических изменений с 5.0 на 6.0 заключается в том, что существует " строгая проверка типов контента " это означает, что запросы к Elasticsearch должны отправляться с заголовком «Content-type: application / json».

Чтобы добавить этот заголовок, я попытался использовать предложение полифрактала из этой темы :

    $params = [
    'index' => $index,
    'type' => $mapping,
    'body' => $query,
    'client' => [
        'curl' => [CURLOPT_HTTPHEADER => array('Content-type: text/plain')]
        ]
    ];

    $res = $this->mESClient->search($params); // this is Elasticsearch/Client

    return $res;

но по какой-то причине я продолжаю получать «Примечание: преобразование массива в строку», когда код пытается выполнить curl_setopt_array () , и запрос отправляется по сети.

Обратите внимание: при удалении части 'client' из массива $ params запрос принимается в Elasticsearch.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Нашел проблему. Похоже, что при попытке установить заголовки HTTP с помощью curl и указании подробностей авторизации в URL-адресе есть ошибка.

например: https://username:password@host:port

По какой-то причине клиент копирует заголовки curl http в другие параметры curl (для которых требуется строка, а не массив) и, следовательно, исключение преобразования массива в строку, выброшенного из curl_setopt_array.

Когда я удалил детали авторизации из URL-адреса хоста и использовал заголовок авторизации curl, все заработало.

0 голосов
/ 08 ноября 2018

Согласно версии Matrix , вы должны использоватьasticsearch-php 6.0 при работе с ES> = 6.

asticsearch-php 5.0 не совместим с ElasticSearch 6.

Поток, который вы упомянули, относится к ES-PHP 1.x / 2.x, который может иметь разный синтаксис для опций. Это не относится к вашей ситуации, за исключением того, что один из комментариев говорит то же самое, что я только что сделал выше.

К вашему сведению, если вы используете Elasticsearch 6.0+, вам необходимо обновить клиент ES-PHP до версии 6.0. ES-PHP 6.0+ автоматически устанавливает заголовки типа содержимого: fd3b0f1

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