美文网首页
在laravel项目中使用elasticsearch

在laravel项目中使用elasticsearch

作者: _不能说的秘密i | 来源:发表于2019-05-04 01:27 被阅读0次

安装好之后,php artisan命令看一下,发现多了一些 elastic 相关的命令

artisan output

索引设置

创建一个索引配置器, 有了配置器才能创建索引

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数据库数据的改变

es

更新字段映射规则

php artisan elastic:update-mapping App\\Company
error

如果出现以上错误是因为,更新的索引映射已经存在,所以存在冲突,只需要将已经存在的删除,然后从新创建索引就好

详情请看源码

https://github.com/liaohui5/laravel-es-example

相关文章

网友评论

      本文标题:在laravel项目中使用elasticsearch

      本文链接:https://www.haomeiwen.com/subject/curtoqtx.html