欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

laravel-elasticsearch 全文搜索设置

程序员文章站 2022-07-06 11:54:51
1、首先安装 jave环境 jdk 下载地址 ,我用的是最新版本的,有时版本要跟elasticsearch对应 2、安装elasticsearch 下载地址 3、安装Laravel scout 全文搜索包,这里我用的是5.0.3版本,tamayo/laravel-scout-elastic .这里的 ......

1、首先安装 jave环境 jdk  ,我用的是最新版本的,有时版本要跟elasticsearch对应

2、安装elasticsearch

3、安装laravel scout 全文搜索包,这里我用的是5.0.3版本,tamayo/laravel-scout-elastic .这里的版本很重要,不然一会就出错了!

composer require laravel/scout=5.0.3

生成配置文件

php artisan vendor:publish --provider="laravel\scout\scoutserviceprovider"

这样,scout就安装完了,这可以参考官方教程

4、因为要使用es做搜索引擎,所以我们要用到一个叫tamayo/laravel-scout-elastic的包。4.0对应5.0.3不要搞错!

composer require tamayo/laravel-scout-elastic=4.0

5、添加服务提供器到config/app.php的providers数组中

// config/app.php
'providers' => [
    ...
    scoutengines\elasticsearch\elasticsearchprovider::class,
],

6、配置。在config/scout.php文件中添加如下代码。默认使用的是algolia引擎,我们要使用es做引擎

'driver' => env('scout_driver', 'elasticsearch'),
'elasticsearch' => [
    'index' => env('elasticsearch_index', '你的索引名'),
    'hosts' => [
        env('elasticsearch_host', 'http://127.0.0.1:9200'),
    ],
],

7、建立model 并配置

<?php

namespace app\models;

use illuminate\database\eloquent\model;
use laravel\scout\searchable;  //一定要有,自动生成没有的

class article extends model
{
    //
    use searchable;   //一定要有

    // 定义索引里面的类型,上文我们说过,可以把type理解成一个数据表。我们现在要做的就是把我们所有的要全文搜索的字段都存入到es中的一个叫'_doc'的表中。  
    public function searchableas()  
    {  
        return 'articles';  
    }  
    // 定义有那些字段需要搜索  
    public function tosearchablearray()  
    {  
        return [  
            'user_title' => $this->title,  //user_name加上前缀以区别。因为不同的表里可能会有相同的字段。mysql中的字段是name,email,created_at。在es中我们存储的user_name,user_email,user_created_at。是可以自定义的。
            'user_description' => $this->description,  
        ];  
    } 
}

8、导入数据,其实看官方的那个文档,来增、更、删除也可以的。主要是配置好es就好了

php artisan scout:import "app\models\article"

9、按官方scout的来使用搜索就可以了,例如

<?php

namespace app\http\controllers;

use illuminate\http\request;
use app\models\article;

class testcontroller extends controller
{
    public function test($value='')
    {
        return article::search('ic')->paginate(5);
    }
}

最后总结,简单使用,可以这样,如果有其它复杂要求的话,可以自行设置!