如何在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

相关文章
相关标签/搜索