Laravel/Tp5--ElasticSearch--增删改查-----高亮显示

 /**  提前声明 ElasticSearch 私有属性  方便以下使用
     * @var
     */
    private $es;


    /**     ElasticSearch的前提  下载  composer require elasticsearch/elasticsearch
     *
     * Uploads constructor.
     * @param Request|null $request
     */
    public function __construct(Request $request = null)
    {
        parent::__construct($request);
        //  这里是地址:127.0.0.1:9200  位于本机地址
        $hosts =  config('host');
        $this->es = ClientBuilder::create()->setHosts($hosts)->build();
    }


    /**
     *  初始化 ElasticSearch,并生成索引,_doc为7.0后默认的类型,所以不用加,加的话报错
     */
    public function ElasticSearch()
    {
        $params = [
            'index' => 'uploads',
            'body' => [
                'settings' => [
                    'number_of_shards' => 3,
                    'number_of_replicas' => 2
                ],
                'mappings' => [
//                    '_doc' => [        
                        '_source' => [
                            'enabled' => true
                        ],
                        'properties' => [
                            'music' => [
                                'type' => 'text',
                                'analyzer' => 'ik_max_word',
                                'search_analyzer' => 'ik_max_word'
                            ],
                            'video' => [
                                'type' => 'text',
                                'analyzer' => 'ik_max_word',
                                'search_analyzer' => 'ik_max_word'
                            ]
                        ]
//                    ]
                ]
            ]
        ];
       $response  = $this->es->indices()->create($params);
       dd($response);
    }


    /**  添加ElasticSearch
     *
     * @param Request $request
     */
    public function save(Request $request)
    {
        $param = $request->param();
        $model = \app\video\model\Uploads::create($param,true);
        // 写文档
        $params = [
            'index' => 'uploads',
            'type' => '_doc',
            'id' => $model->id,
            'body' => [
                'music' => $model->music,
                'video' => $model->video,

            ],
        ];
        $response = $this->es->index($params);
        dd($response);
    }




    /**     搜索并高亮显示  安装 composer require nunomaduro/collision 即可,为高亮做准备,前端可设置颜色 em : {color : red}
     * @param Request $request
     */
    public function search(Request $request)
    {
        $param = $request->param('music');
        $params = [
            'index' => 'uploads',
            'body'  => [
                'query' => [
                    'multi_match' => [
                        'query' => $param,
                        'fields' => ['music','video']
                    ]
                ],
                'highlight' => [
                    'fields' => [
                        "*" => new Highlighter()
                    ]
                ]
            ]
        ];
        $response = $this->es->search($params);
        print_r($response);
    }


    /**     进行修改
     * @param Request $request
     * @param $id
     */
    public function update(Request $request,$id)
    {
        $param = $request->param();
        $model = \app\video\model\Uploads::update($param,['id'=>$id],true);
        // 写文档
        $params = [
            'index' => 'uploads',
            'type' => '_doc',
            'id' => $model->id,
            'body' => [
                'music' => $model->music,
                'video' => $model->video,
            ],
        ];
        $response = $this->es->index($params);
        dd($response);
    }

    /**     进行删除
     * @param Request $request
     * @param $id
     */
    public function delete(Request $request,$id)
    {
        //  进行删除数据
          \app\video\model\Uploads::destroy($id);
        $params = [
            'index' => 'uploads',
            'id'    => $id
        ];
        $response = $this->es->delete($params);
        dump($response);
    }





//    这里是我自己写的备注,请勿与上面一块粘贴
        $name = $request->name;
        $data = Book::when($name, function ($query, $name) {
            $query->where('name','like', "%{$name}%");
        })->paginate(5)->appends($request->all());

 

posted @ 2021-03-17 10:04  jerry_min  阅读(233)  评论(0编辑  收藏  举报