如何在Lumen中使用Elasticsearch

如何在Lumen中使用Elasticsearch

前言

Lumen是基於Laravel核心組件的微框架,隨着Laravel5的發佈,目前版本也已經到5了。以前受到這篇爲你的站點插上ElasticSearch的翅膀的啓發, 就嘗試在lumen中引入ES,並完成中文索引。php

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

下載運行Elasticsearch

關於運行就很少說了,你們直接看官方文檔就行。git

引入第三方包

  • 在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這個文件,看看哪些方法須要添加。github

  • 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互動了。json

如何使用

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

關於中文索引

谷歌上關於ES中文搜索的文章有不少,例如這篇。文中比較了5個不一樣分詞插件。我挑選了smartcnicu使用瞭如下,發現簡單的詞彙是沒問題的,可是有一些詞仍是不能很好的分出來,例如"谷歌",兩個插件都變爲了"谷","歌";「薪酬」在smartcn下被拆分爲「薪」,「酬」,icu效果卻是很好。segmentfault

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

相關文章
相關標籤/搜索