1. 程式人生 > >laravel-elasticsearch 全文搜尋設定

laravel-elasticsearch 全文搜尋設定

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);
    }
}

最後總結,簡單使用,可以這樣,如果有其它複雜要求的話,可以自行設定!