将Content-type标头设置为Elasticsearch-php客户端

时间:2018-11-08 11:56:18

标签: php elasticsearch

我正在尝试使用Elasticsearch-php 5.0版将搜索查询发送到Elasticsearch 6.4.2。

从5.0到6.0的重大突破之一是存在“ strict content type validation” 这意味着对Elasticsearch的请求必须使用“ Content-type:application / json”标头发送。

为了添加此标头,我尝试使用this thread中的polyfractal建议:

    $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()并且请求是净发送时,我不断收到“通知:数组到字符串的转换”。

请注意:当我删除$ params数组的'client'部分时,该请求将在Elasticsearch中收到。

2 个答案:

答案 0 :(得分:1)

根据Version Matrix,在处理ES> = 6时,应使用elasticsearch-php 6.0。

elasticsearch-php 5.0与ElasticSearch 6不兼容。

您提到的线程与ES-PHP 1.x / 2.x有关,后者的选项语法可能不同。这与您的情况无关,除了其中一条评论与我上面所做的相同。

  

仅供参考,如果您使用的是Elasticsearch 6.0+,则也需要将ES-PHP客户端升级到6.0分支。 ES-PHP 6.0+自动设置内容类型的头文件:fd3b0f1

答案 1 :(得分:0)

发现了问题。尝试使用curl设置HTTP标头并在URL中指定授权详细信息时,似乎有一个错误的功能。

例如: https:// 用户名:密码 @host:端口

由于某种原因,客户端将curl http标头复制到其他curl选项(需要字符串而不是array)中,因此,将curl_setopt_array引发的Array到字符串转换的例外。

当我从主机URL中删除授权详细信息并使用curl授权标头时,一切正常。