如何在Lumen中使用Elasticsearch

dmc3 9年前發布 | 19K 次閱讀 Web框架 ElasticSearch

如何在Lumen中使用Elasticsearch

前言

Lumen是基于Laravel核心組件的微框架,隨著Laravel5的發布,目前版本也已經到5了。之前受到這篇 為你的站點插上ElasticSearch的翅膀 的啟發, 就嘗試在lumen中引入ES,并完成中文索引。

谷歌一下“Laravel Elasticsearch”, 會發現很多插件,本文使用的是上面文章中提到的Fadion/Bouncy,其實各個插件都大同小異,主要功能都是ES提供的library完成的。

下載運行Elasticsearch

關于運行就不多說了,大家直接看 官方文檔 就行。

引入第三方包

  • 在lumen項目的composer.json中添加如下內容
json"require": {
        "fadion/bouncy": "dev-l5"
    },
  • 運行composer update "fadion/bouncy", 開始下載依賴。
  • 把\Fadion\Bouncy\BouncyServiceProvider加入到bootstrap/app.php中,如下
php$app->register(Fadion\Bouncy\BouncyServiceProvider::class);
  • 把"fadion/bouncy"包中的config文件夾中的文件復制到自己的config文件夾中,并把config.php重命名為bouncy.php

為Lumen適配

由于這個包是為Laravel5提供的,有一些函數需要補充。首先打開\Fadion\Bouncy\BouncyServiceProvider這個文件,看看哪些方法需要添加。

  • config_path函數,Lumen中沒有提供這個方法,需要自己補充下,非常簡單的方法,記得用composer加載文件。
phpfunction config_path(){
    return app()->basePath('config');
}
  • Lumen中加載配置文件的方式和Larvel不同,需要在\App\Providers\AppServiceProvider中添加如下方法,并在register方法中調用。注意\App\Providers\AppServiceProvider必須在\Fadion\Bouncy\BouncyServiceProvider之前被注冊。
phpprotected function loadConfigFile(){
    $this->app->configure('elasticsearch');
}

至此,Lumen已經能夠和ES互動了。

如何使用

簡單使用的話,只需要在Eloquent Model中添加一個Trait即可,請參照github上的 文檔 或者 為你的站點插上ElasticSearch的翅膀 文中的介紹。畢竟接下來都是ES的內容,官方文檔一大堆,要一下完全搞清楚那些名詞也不現實,google配合文檔是個好方法。

關于中文索引

谷歌上關于ES中文搜索的文章有很多,例如 這篇 。文中比較了5個不同分詞插件。我挑選了smartcn和icu使用了以下,發現簡單的詞匯是沒問題的,但是有一些詞還是不能很好的分出來,例如"谷歌",兩個插件都變為了"谷","歌";“薪酬”在smartcn下被拆分為“薪”,“酬”,icu效果倒是很好。

關于如何精確設置索引,請關注ES官方文檔中的 mapping -> core type 。中文索引中涉及的ES內容比較多,下次再用一個篇幅來分析。

原文  http://segmentfault.com/a/1190000003017792

 本文由用戶 dmc3 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!