- 首先需要安装这个 package
安装好之后,php artisan
命令看一下,发现多了一些 elastic
相关的命令
索引设置
创建一个索引配置器, 有了配置器才能创建索引
php artisan make:index-configurator App\\Es\\CompanyIndexConf
App\\Es\\CompanyIndexConf
这个是配置器的命名空间, 不一定非得是这样
<?php
namespace App;
use App\Es\CompanyIndexConf;
use Illuminate\Database\Eloquent\Model;
use ScoutElastic\Searchable;
class Company extends Model
{
use Searchable;
/**
* @var string
*/
protected $indexConfigurator = CompanyIndexConf::class;
/**
* @var array
*/
protected $searchRules = [
//
];
/**
* @var array
*/
protected $mapping = [
'properties' => [
'name' => [
'type' => 'text',
'analyzer' => 'ik_smart', // 使用 ik_smart 分析器,es必须安装对应的插件
'search_analyzer' => 'ik_smart',
'boost' => 5,
'fields' => [
'company_name' => [
'type' => 'keyword',
'ignore_above' => 256,
],
],
],
'city' => [
'type' => 'keyword',
],
'vision' => [
'type' => 'text',
'analyzer' => 'ik_smart',
'search_analyzer' => 'ik_smart',
],
'email' => [
'type' => 'keyword',
],
'phone' => [
'type' => 'keyword',
],
],
];
/**
* 设置索引的type
*
* @return string
*/
public function searchableAs()
{
return 'company';
}
}
使用laravel的facker填充一些数据
这个没什么难度...就不用长篇大论了,上代码...
php artisan make:factory CompanyFactory
<?php
/* @var $factory \Illuminate\Database\Eloquent\Factory */
use Faker\Generator as Faker;
$factory->define(\App\Company::class, function (Faker $faker) {
$faker = \Faker\Factory::create('zh_CN'); // 填充中文数据
return [
'name' => $faker->company,
'city' => $faker->city,
'vision' => $faker->catchPhrase(),
'email' => $faker->email,
'phone' => $faker->phoneNumber,
];
});
去 kibana 中查看所有文档
GET company/_search
神奇的事情发生了, mysql数据库中填充的数据自动同步到了es中
使用searchable model
es会自动同步mysql数据库数据的改变
更新字段映射规则
php artisan elastic:update-mapping App\\Company
error
如果出现以上错误是因为,更新的索引映射已经存在,所以存在冲突,只需要将已经存在的删除,然后从新创建索引就好
详情请看源码
网友评论