Laravel使用elasticsearch+analysis-ik

新建一個項(xiàng)目演示轮听;

laravel new elasticsearch

創(chuàng)建一個文章表和文章模型捍歪;

php artisan make:model Models/Article -m

添加文章標(biāo)題和內(nèi)容字段
/database/migrations/2018_06_03_080124_create_articles_table.php

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('articles', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title')->default('')->comment('標(biāo)題');
        $table->mediumText('content')->comment('文章內(nèi)容');
        $table->timestamps();
    });
}

修改 .env 數(shù)據(jù)庫配置項(xiàng);

DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

運(yùn)行遷移生成表;

php artisan migrate

創(chuàng)建填充文件;

php artisan make:seed ArticlesTableSeeder

生成測試數(shù)據(jù);

public function run()
{
    DB::table('articles')->insert([
        [
            'title' => 'elasticsearch',
            'content' => '一個基于Lucene的企業(yè)級搜索引擎'
        ],
        [
            'title' => 'elasticsearch analysis ik',
            'content' => '用于 elasticsearch 的中文分詞插件'
        ]
    ]);
}

運(yùn)行填充洪橘;

php artisan db:seed --class=ArticlesTableSeeder

/routes/web.php

<?php
use App\Models\Article;

Route::get('search', function () {
    // 為查看方便都轉(zhuǎn)成數(shù)組
    dump(Article::all()->toArray());
});

準(zhǔn)備工作至此結(jié)束鲸睛;
下面開始整合入 laravel ;
有三種方案可供選擇瞻惋;

第一種方案是 laravel-scout-elastic ;
這種基于 scout 的厦滤;
好處我們上篇文章已經(jīng)寫了;
增刪改操作后自動更新索引歼狼;
配置起來也簡單方便掏导;
可以非常方便的在各種基于 scout 搜索方案間切換;
但是它并不理解東方神秘的方塊字羽峰;
不能自定義分詞器趟咆;
也不能愉快的完成中文搜索功能;

另一種是 Elasticquent ;
這種是獨(dú)立于 scout 的限寞;
它提供了符合 laravel 風(fēng)格的操作索引的 api 忍啸;
并且和模型結(jié)合在了一起可以方便的進(jìn)行搜索仰坦;
可以自定義分詞愉快的中文搜索了履植;
但是結(jié)合的不像 scout 那樣緊密;
對數(shù)據(jù)庫增刪改后還需要手動同步對索引進(jìn)行相同的操作悄晃;
想便捷點(diǎn)也需要自己綁定監(jiān)聽增刪改的事件玫霎;

那能不能有一個開箱即用還支持中文搜索的方案;
于是有了第三種方案 baijunyao/laravel-scout-elasticsearch 橫空出世;
安裝 driver 妈橄;

composer require baijunyao/laravel-scout-elasticsearch

添加 Provider 庶近;
config/app.php

'providers' => [

    // ...

    /**
     * Elasticsearch全文搜索
     */
    Laravel\Scout\ScoutServiceProvider::class,
    Baijunyao\LaravelScoutElasticsearch\ElasticsearchServiceProvider::class,
],

發(fā)布配置項(xiàng);

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

增加配置項(xiàng);
/.env ;

SCOUT_DRIVER=elasticsearch

Bash

Copy

模型中定義全文搜索眷蚓;
/app/Models/Article.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;

class Article extends Model
{
    use Searchable;

    /**
     * 索引的字段
     *
     * @return array
     */
    public function toSearchableArray()
    {
        return $this->only('id', 'title', 'content');
    }
}

生成索引鼻种;

php artisan elasticsearch:import "App\Models\Article"

使用起來也相當(dāng)簡單;
只需要把要搜索的內(nèi)容傳給 search() 方法即可;
/routes/web.php

<?php
use App\Models\Article;

Route::get('search', function () {
    // 為查看方便都轉(zhuǎn)成數(shù)組
    dump(Article::all()->toArray());
    dump(Article::search('功能齊全的搜索引擎')->get()->toArray());
});

成功的查出了數(shù)據(jù)沙热;

最后我們再測下修改數(shù)據(jù)后的同步索引叉钥;

routes/web.php

<?php

use App\Models\Article;

Route::get('search', function () {
    // 為查看方便都轉(zhuǎn)成數(shù)組
    dump(Article::all()->toArray());
    dump('下面搜索的是:企業(yè)搜索');
    dump(Article::search('企業(yè)搜索')->get()->toArray());
    dump('此處把content改為:能勝任上百個服務(wù)節(jié)點(diǎn)的擴(kuò)展,并支持 PB 級別的結(jié)構(gòu)化或者非結(jié)構(gòu)化數(shù)據(jù)');
    // 修改 content 測試索引是否會自動同步
    $first = Article::find(1);
    // $first->content = '一個基于Lucene的企業(yè)級搜索引擎';
    $first->content = '能勝任上百個服務(wù)節(jié)點(diǎn)的擴(kuò)展篙贸,并支持 PB 級別的結(jié)構(gòu)化或者非結(jié)構(gòu)化數(shù)據(jù)';
    $first->save();
    // 因 Elasticsearch 同步索引需要點(diǎn)時間此處休眠5秒鐘
    sleep(5);
    dump('下面搜索的是:企業(yè)搜索');
    dump(Article::search('企業(yè)搜索')->get()->toArray());
    dump('下面搜索的是:能勝服務(wù)');
    dump(Article::search('能勝服務(wù)')->get()->toArray());
});

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末投队,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子爵川,更是在濱河造成了極大的恐慌敷鸦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寝贡,死亡現(xiàn)場離奇詭異扒披,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)圃泡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門碟案,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洞焙,你說我怎么就攤上這事蟆淀≌玻” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵熔任,是天一觀的道長褒链。 經(jīng)常有香客問我,道長疑苔,這世上最難降的妖魔是什么甫匹? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮惦费,結(jié)果婚禮上兵迅,老公的妹妹穿的比我還像新娘。我一直安慰自己薪贫,他們只是感情好恍箭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞧省,像睡著了一般扯夭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鞍匾,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天交洗,我揣著相機(jī)與錄音,去河邊找鬼橡淑。 笑死构拳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梁棠。 我是一名探鬼主播置森,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掰茶!你這毒婦竟也來了暇藏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤濒蒋,失蹤者是張志新(化名)和其女友劉穎盐碱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沪伙,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓮顽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了围橡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暖混。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖翁授,靈堂內(nèi)的尸體忽然破棺而出拣播,到底是詐尸還是另有隱情晾咪,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布贮配,位于F島的核電站谍倦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泪勒。R本人自食惡果不足惜昼蛀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望圆存。 院中可真熱鬧叼旋,春花似錦、人聲如沸沦辙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怕轿。三九已至偷崩,卻和暖如春辟拷,著一層夾襖步出監(jiān)牢的瞬間撞羽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工衫冻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诀紊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓隅俘,卻偏偏與公主長得像邻奠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子为居,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容