我有一个全新的elasticsearch 5.0.0和elasticsearch-php。我正在尝试创建一个索引。
我运行this索引管理文档中的代码:
$client = ClientBuilder::create()->build();
$params = [
'index' => 'my_index'
];
// Create the index
$response = $client->indices()->create($params);
它有效。我成功创建了一个索引。
我尝试下一个代码段:
$client = ClientBuilder::create()->build();
$params = [
'index' => 'my_index',
'body' => [
'settings' => [
'number_of_shards' => 3,
'number_of_replicas' => 2
],
'mappings' => [
'my_type' => [
'_source' => [
'enabled' => true
],
'properties' => [
'first_name' => [
'type' => 'string',
'analyzer' => 'standard'
],
'age' => [
'type' => 'integer'
]
]
]
]
]
];
// Create the index with mappings and settings now
$response = $client->indices()->create($params);
我得到了:
Elasticsearch\Common\Exceptions\BadRequest400Exception with message 'No handler found for uri [/my_index] and method [POST]'
任何想法为什么?
这段代码在我使用elasticsearch 2.0
时常常起作用编辑:我发现了this问题,所以要么是elasticsearch-php的问题,要么是我需要更新它我想
我正在使用弹性,我刚刚意识到需要elasticsearch-php版本< 2.2所以这就是导致问题的原因
答案 0 :(得分:1)
查看错误消息:
No handler found for uri [/my_index] and method [POST]
这意味着您的创建索引调用正在使用HTTP POST方法。在以前的版本(即5.0之前版本)中,elasticsearch-php客户端用于使用HTTP POST创建索引,但由于ES 5.0仅接受HTTP PUT以创建新索引。
9月的This change使这个创建调用再次与ES 5.0兼容。
唯一可能的解释是您安装了ES 5.0,但没有安装了elasticsearch-php客户端的5.0版本。
由于您正在运行doesn't yet support ES 5的Elasticquent,因此您可以通过修改Endpoints/Indices/Create.getMethod()
方法以始终返回PUT
而不是POST
来暂时解决此问题将再次工作,但你可能会遇到其他不兼容性。