我正在尝试使用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中收到。
答案 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授权标头时,一切正常。