我正在尝试使用Elasticsearch-php 5.0版本将搜索查询发送到Elasticsearch 6.4.2。
从5.0到6.0的一个重大变化是存在"严格的内容类型验证“,这意味着对Elasticsearch的请求必须用”Content: 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;但是由于某种原因,当代码尝试执行数组()时,我一直得到“注意:数组到字符串的转换”,并且请求被网络发送。
请注意:当我删除$params数组的“client”部分时,请求将在Elasticsearch中接收。
发布于 2018-11-08 12:19:22
根据版本矩阵,在处理ES >=6时,应该使用ElasticSearch-php6.0。
ElasticSearch 5.0与ElasticSearch 6不兼容。
您提到的线程与ES-PHP1.x/2.x有关,它可能具有不同的选项语法。这与你的情况无关,只是其中一条评论和我刚才说的一样。
FYI,如果您使用的是Elasticsearch 6.0+,您也需要将您的ES-PHP客户端升级到6.0分支。ES 6.0+自动设置内容类型标题: fd3b0f1
发布于 2018-11-08 13:05:35
发现问题了。在试图使用curl设置HTTP头并在URL中指定授权细节时,似乎存在一个错误的功能。
例如:@主机:端口
由于某些原因,客户端将curl头复制到其他curl选项(需要字符串而不是数组),因此,除了从curl_setopt_array引发的数组到字符串转换。
当我从主机URL中删除授权细节并使用curl授权头时,一切都正常工作。
https://stackoverflow.com/questions/53207255
复制相似问题