Laravel + Scout + Elasticsearch 全文搜索

之前一直直接使用Elasticsearch完成搜索蝴簇,最近發(fā)現(xiàn)了Scout這個Laravel插件,決定試用一下,底層的搜索引擎還是用了Elasticsearch,當然還可以使用Algolia泞莉,主要還有數(shù)據(jù)統(tǒng)計的地方會用到ES,所以底層就都用ES來存儲了船殉。

1. 安裝Elasticsearch

1.1 docker 安裝ES

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.0
docker run -d --name elastic -p 9201:9200 -p 9301:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms1g -Xmx1g" docker.io/elasticsearch:7.10.0

1.2 安裝IK分詞

docker exec -it f80b12611cd6 /bin/bash
cd bin
./elasticsearch-plugin -v install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.10.0/elasticsearch-analysis-ik-7.10.0.zip

1.3 重啟docker鏡像

docker restart f80b12611cd6

2. Laravel集成Scout

2.1 安裝依賴

composer require elasticsearch/elasticsearch

composer require tamayo/laravel-scout-elastic:8.0.3 // 因為我的php版本只有7.1

composer require laravel/scout

php artisan vendor:publish

選擇 Laravel\Scout\ScoutServiceProvider

image

2.2 配置參數(shù)

scout.php文件

image
image

3. 搜索內(nèi)容

3.1 更新模型

<?php

namespace App\Models;

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

class PlatformItemStock extends Base
{
    use Searchable;

    protected $table = "platform_item_stock";

    public $timestamps = true;

    protected $guarded = [];

    public function attributes() {
        return $this->hasMany(PlatformItemAttribute::class, 'itemsStockId', 'id');
    }

    public function skuImage()
    {
        return $this->belongsTo(Attachment::class, 'itemSkuImageId');
    }

    public function item()
    {
        return $this->belongsTo(PlatformItem::class, 'itemId');
    }

    protected function makeAllSearchableUsing($query)
    {
        return $query->with(['item', 'item.category', 'item.brand', 'item.series', 'item.material']);

    }
}

3.2 引入模型內(nèi)容

php artisan scout:import "App\Models\PlatformItemStock"
image

3.3 搜索調(diào)用

public function search($query, $num)
    {
        return $this->model->search($query)->paginate($num);
    }

3.4 更新搜索內(nèi)容

public function store($query)
    {
        $result = $this->model->create($query);
        $result->with(['item', 'item.category', 'item.brand', 'item.series', 'item.material'])->searchable();
        return $result;
    }

    public function update($id, $query)
    {
        $res = $this->model->find($id);
        $res->update($query);
        $res->with(['item', 'item.category', 'item.brand', 'item.series', 'item.material'])->searchable();
        return $res;
    }

ps.臨時修復laravel scout elastic的bug(因為我的docker里面php版本太低了鲫趁,沒辦法升級安裝包,找時間更新一下版本)

打開vendor/tamayo/laravel-scout-elastic/src/Engines/ElasticsearchEngine.php

$result['hits']['total'] = $result['hits']['total']['value'];
// 上面增加這一行
$result['nbPages'] = $result['hits']['total'] / $perPage;

參考:

https://segmentfault.com/a/1190000039854381

https://github.com/medcl/elasticsearch-analysis-ik

https://segmentfault.com/a/1190000021670576

https://cloud.tencent.com/developer/article/1725623

https://github.com/ErickTamayo/laravel-scout-elastic/issues/123

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末利虫,一起剝皮案震驚了整個濱河市饮寞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌列吼,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苦始,死亡現(xiàn)場離奇詭異寞钥,居然都是意外死亡,警方通過查閱死者的電腦和手機陌选,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門理郑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咨油,你說我怎么就攤上這事您炉。” “怎么了役电?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵赚爵,是天一觀的道長。 經(jīng)常有香客問我法瑟,道長冀膝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任霎挟,我火速辦了婚禮窝剖,結果婚禮上,老公的妹妹穿的比我還像新娘酥夭。我一直安慰自己赐纱,他們只是感情好脊奋,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疙描,像睡著了一般诚隙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淫痰,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天最楷,我揣著相機與錄音,去河邊找鬼待错。 笑死籽孙,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的火俄。 我是一名探鬼主播犯建,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓜客!你這毒婦竟也來了适瓦?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谱仪,失蹤者是張志新(化名)和其女友劉穎玻熙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疯攒,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡嗦随,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敬尺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枚尼。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖砂吞,靈堂內(nèi)的尸體忽然破棺而出署恍,到底是詐尸還是另有隱情,我是刑警寧澤蜻直,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布盯质,位于F島的核電站,受9級特大地震影響袭蝗,放射性物質(zhì)發(fā)生泄漏唤殴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一到腥、第九天 我趴在偏房一處隱蔽的房頂上張望朵逝。 院中可真熱鬧,春花似錦乡范、人聲如沸配名。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渠脉。三九已至宇整,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芋膘,已是汗流浹背鳞青。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留为朋,地道東北人臂拓。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像习寸,于是被迫代替她去往敵國和親胶惰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

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