2016-11-15 7 views
1

У меня есть новая установка elasticsearch 5.0.0 и elasticsearch-php. Я пытаюсь создать индекс.elasticsearch-php create index возвращает BadRequest400Exception

я запускаю код из документации управления 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

EDIT: Я нашел this вопрос так как это проблема с elasticsearch-PHP или мне нужно обновить его, я думаю,

Я использую elasticquent которые я только что понял, требует elasticsearch-версии PHP < 2,2 так это то, что вызывает проблему

+0

Можете ли вы попробовать изменить? '$ response = $ client-> index() -> putSettings ($ params);' –

+0

, который возвращает 'Elasticsearch \ Common \ Exceptions \ Missing404Exception с сообщением '{" error ": {" root_cause ": [{" type ": "index_not_found_exception", "reason": "no такой индекс", "resource.type": "index_or_alias", "resource.id": "my_index", "index_uid": "_ na _", "index": "my_index"} ], «type»: «index_not_found_exception», «reason»: «no такой индекс», «resource.type»: «index_or_alias», «resource.id»: «my_index», «index_uid»: «_ na _», «index ":" my_index "}," status ": 404} ' ' – user3494047

ответ

1

Глядя на сообщение об ошибке:

No handler found for uri [/my_index] and method [POST] 

Это означает, что ваш индексный вызов create использует метод HTTP POST под капотом. В предыдущих версиях (т. Е. Pre 5.0) клиент elasticsearch-php, используемый для создания индексов с HTTP POST, но поскольку ES 5.0 только HTTP PUT принимается для создания нового индекса.

This change В сентябре этого года этот звонок снова совместим с ES 5.0.

Единственное возможное объяснение заключается в том, что у вас установлен ES 5.0, но у вас нет версии клиента elasticsearch-php 5.0.

Поскольку вы работаете Elasticquent который doesn't yet support ES 5, вы можете временно обойти эту проблему, изменив метод Endpoints/Indices/Create.getMethod() всегда возвращать PUT вместо POST и вашего звонка будет работать снова, но вы можете столкнуться с другой несовместимостью.

Смежные вопросы