elasticsearch-php create index返回\ BadRequest400Exception

时间:2016-11-15 20:33:53

标签: php elasticsearch

我有一个全新的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所以这就是导致问题的原因

1 个答案:

答案 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来暂时解决此问题将再次工作,但你可能会遇到其他不兼容性。