Решил поразбираться с интеграцией elasticsearch в yii2. Использую экстеншн yiisoft/yii2-elasticsearch.
Контроллер:<?php
namespace console\controllers;
use Yii;
use console\models\CountryElastic;
class CountryIndexController extends \yii\console\Controller
{
public function actionIndex()
{
for ($i=0; $i<5; $i++) {
$countryElastic = new CountryElastic();
$countryElastic->attributes = ['name' => 'country name' . $i];
$countryElastic->save();
}
}
}
Модель:<?php
namespace console\models;
use Yii;
class CountryElastic extends \yii\elasticsearch\ActiveRecord
{
public static function index() {
return 'test';
}
public static function type() {
return 'country';
}
public function attributes()
{
return ['name'];
}
}
Сначала проверяю, что индекс
test с типом
country пуст:
127.0.0.1:9200/test/country/_search?pretty=true{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : null,
"hits" : [ ]
}
}
Потом в консоли запускаю ./yii country-index. Все выполняется без ошибок, смотрю опять
127.0.0.1:9200/test/country/_search?pretty=true{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 5,
"max_score" : 1.0,
"hits" : [ {
"_index" : "test",
"_type" : "country",
"_id" : "AU-ts-L5LdBGMLEkdKiZ",
"_score" : 1.0,
"_source":{}
}, {
"_index" : "test",
"_type" : "country",
"_id" : "AU-ts-M6LdBGMLEkdKib",
"_score" : 1.0,
"_source":{}
}, {
"_index" : "test",
"_type" : "country",
"_id" : "AU-ts-NCLdBGMLEkdKid",
"_score" : 1.0,
"_source":{}
}, {
"_index" : "test",
"_type" : "country",
"_id" : "AU-ts-M-LdBGMLEkdKic",
"_score" : 1.0,
"_source":{}
}, {
"_index" : "test",
"_type" : "country",
"_id" : "AU-ts-M0LdBGMLEkdKia",
"_score" : 1.0,
"_source":{}
} ]
}
}
Как видно, для типа
country появилось пять документов, но без атрибута
name и без его содержимого. Почему не создался атрибут и не сохранились его данные? Что я делаю не так?
Да, и можно как-то глобально прописать название используемого индекса для проекта, чтобы не переопределять index() в каждой модели?