一 简介

laravel 的组件化使 laravel 的使用更加得心应手。

Laravel Scout 为 Eloquent 模型 全文搜索提供了简单的,基于驱动的解决方案。通过使用模型观察者,Scout 会自动同步 Eloquent 记录的搜索索引。

简单的来说 Scout 是用来全文检索的一个组件(不具有搜索功能),它使用驱动来调用搜索引擎来进行搜索。这里讲解 laravel 使用 elasticsearch 搜索引擎。

在已有的项目中要想使用 elsaticsearch 搜索引擎,需要四个步骤:

1.给项目 compoer 安装 Scout    2.给项目 composer 安装 elasticsearch 驱动

3.给服务器安装 elasticsearch 搜索引擎    4.在项目中建立 elasticsearch 索引和模板

1 和 2 使用 composer 来安装,3 我们使用GitHub上别人做的集成包,里面有个 ik 插件,是用来优化中文检索,elasticsearch 只是搜索引擎,而对搜索的实际效果是靠插件来进行的。ik 中文搜索靠的是词意解析,中华人民共和国国歌,精确解析:中华人民共和国、中华、华人、人民、共和国、国歌,粗糙解析:中华人民共和国、国歌。解析的效果不同。

下面给出带有 ik 插件的 elastsearch 集成包:https://github.com/medcl/elasticsearch-rtf

二 安装步骤

1.安装 elasticsearch 搜索引擎到服务器

  下载上面的集成包,Download ZIP,在服务器上进行解压(windows测试练习同样步骤、下载解压)

  下载 java1.8 安装和配置环境变量(这里不讲解,百度大把教程,已经安装的继续)

  打开解压的文件夹到 bin 下,可以使用 ls 查看bin下的文件( windows下命令行使用 dir 查看 )

  有一个 elasticsearch 和 elasticsearch.bat ,这时候我们启动 elasticsearch

  方法是输入:elasticsearch -d ( windows下命令行里输入 elasticsearch.bat -d ),这样子就可以启动成功

  启动会显示日志,可以看到有 127.0.0.1:9200 既是启动成功,可以在浏览器输入这个 ip加端口,会看到一个 json 信息。

  在服务器搭建的时候,一定要启动并且守护进程。bin 下还有一个文件是 elasticsearch-plugin

  可以使用 elasticsearch-plugin list 来查看搜索引擎的插件,其中一个既是我们要使用的 ik 中文检索插件。

2. 安装Scout

  进入到项目里面,使用:composer require laravel/scout 来安装Scout

  安装完成后再次输入:php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

  这个目的是把 Scout.php 配置文件从 vendor 中提取到 config 中,进行 Scout 配置

  接下来把 Scout 服务提供者放入 app.php 配置文件中,在 providers 中插入:Laravel\Scout\ScoutServiceProvider::class

  这样子 Scout 就安装完了

3. 安装elasticsearch

  在进行搜索的时候,Scout 通过 elasticsearch 驱动,来调用 elasticsearch 搜索引擎,搜索引擎通过 ik 插件,进行解析并返回数据。

  安装驱动通过 composer 安装,终端( 或者命令行 )打开项目输入:composer require tamayo/laravel-scout-elastic

  安装完成后,到 app.php 配置文件中注册服务提供者,在 providers 中插入:ScoutEngines\Elasticsearch\ElasticsearchProvider::class

  插入完成后,到 Scout.php 配置文件中,配置 Scout 的驱动为 elasticsearch

  将驱动的默认值改为elasticsearch,在配置文件中找到这一段并修改  'driver' => env('SCOUT_DRIVER', 'elasticsearch')

  在下方插入 elasticsearch 驱动的配置,其意思为,elasticsearch 的索引名为 laravel ,可以自己修改,它的 ip 地址为本服务器的 9200 端口:

  'elasticsearch' => [ 'index' => env('ELASTICSEARCH_INDEX', 'post'), 'hosts' => [ env('ELASTICSEARCH_HOST', 'http://127.0.0.1:9200'), ], ],

  在这里,索引的名称不能使用laravel,否则后面会报错,换个名称,这里我使用post,这样,驱动就安装配置完成

4. elasticsearch 的索引和模板建立

  使用 Artisan 创建一个自定义 command 命令,这个命令用来初始化创建索引和模板。

  创建 command 的方法:php artisan make:command ESinit    给这个命令取名为ESinit,意思为初始化ES

  创建好了,在 app 下的 Console 中会生成文件夹 Commands,这个文件夹存放自定义的 artisan 命令,我们可以到看 ESinit.php

  在这个文件中有两个属性和两个方法,属性为命令名称和描述,方法为一个构造函数和一个 handle 句柄函数。

  修改两个属性,第一个为:es:init ,意思为在我们创建好了这个命令的时候,就可以使用 php artisan es:init 来执行 handle 行为去创建模板与索引

  第二个为这个命令的描述,用来告诉使用者,这个命令是用来干吗,修改为:init laravel es for model ,意思为初始化 laravel 的 es 搜索对某个模型

  接下就要进行 handle 行为编写,第一个是编写 template 模板,第二个是编写 index 索引,如何去创建模板与索引。

  使用restful风格的 http 请求,往 ES搜索引擎发送 http 请求,需要引入一个类库:GuzzleHttp\Client ,

  安装这个类使用 composer :composer require guzzlehttp/guzzle  安装好后,在 ESinit.php 中 user GuzzleHttp\Client;

  接下来在 handle 中编写行为,比较复杂,直接贴上来:

  

class ESinit extends Command
{/*** The name and signature of the console command.** @var string*/protected $signature = 'es:init';/*** The console command description.** @var string*/protected $description = 'init laravel es for model';/*** Create a new command instance.** @return void*/public function __construct(){parent::__construct();}/*** Execute the console command.** @return mixed*/public function handle(){$client = new Client();// 创建模版$url = config('scout.elasticsearch.hosts')[0] . '/_template/tmp';$client->put($url, ['json' => ['template' => config('scout.elasticsearch.index'),'settings' => ['number_of_shards' => 1],'mappings' => ['_default_' => ['_all' => ['enabled' => true],'dynamic_templates' => [['strings' => ['match_mapping_type' => 'string','mapping' => ['type' => 'text','analyzer' => 'ik_smart','ignore_above' => 256,'fields' => ['keyword' => ['type' => 'keyword']]]]]]]]]]);$this->info("=====创建模板成功=====");$url = config('scout.elasticsearch.hosts')[0] . '/' . config('scout.elasticsearch.index');$client->put($url, ['json' => ['settings' => ['refresh_interval' => '5s','number_of_shards' => 1,'number_of_replicas' => 0,],'mappings' => ['_default_' => ['_all' => ['enabled' => false]]]]]);$this->info("=====创建索引成功=====");}
}

  简单说明:实例化Client这个类,然后创建模板和索引的url,分别像url插入数据。索引用来存放被查询的文章,模板用来放查询的规则

  每次查询都是在搜索引擎去调用索引查询,而不是去数据库中查询,这方面的只是可以到 elasticsearch 官网查看相关文档。

  在完成 handle 行为的编写,就可以把这个自定义命令挂载到 artisan 中,在 app 下的 Console 下的 Kernel.php 中的 commands 属性中加上

  \App\Console\Commands\ESinit::class  这段代码即可完成挂载。

  编写完成了,在命令行输入:php artisan es:init  这样子就创建完成了。

5. 修改模型、导入数据到索引

  在要搜索的模型中 use Laravel\Scout\Searchable;

  定义两个方法,直接贴上来:

  

use Searchable;//定义索引里的type值public function searchableAs(){return 'post';}//定义要查询的字段public function toSearchableArray(){return ['title' => $this->title,'content' => $this->content];}

  定义好了这两个方法,需要导入模型数据到索引中。

  使用 artisan 命令:php artisan scout:import 'App\Post'    使用此方法需要带个模型,既把这个模型的数据存入索引中,在这里遇到问题

  需要安装 php-curl 扩展,否则报错。

6. 实际上的配置安装都已完成

  在这里我,进行模板和路由控制器的创建进行一次测试。

  创建路由和对应的控制器方法以及修改模板。

  路由:Route::get('post/search','Home\PostController@search')->name('user.post.search'); //搜索文章

  控制器:

//搜索文章
public function search(Request $request)
{
$this->validate($request,[
'query' => 'required'
]);
$query = $request->input('query');

$posts = Post::search($query)->paginate(5); //这里拿到的是查询出来的文章,传递给模板

return view('home.post.search',compact('posts','query'));
}

  模板中:传递过去的给模板的主要用到这里:<p>下面是搜索{{$query}}出现的文章,共{{$posts->total()}}条</p>

  total 方法为 paginate 的计算总数量的方法,其他直接循环遍历 posts  通过属性值拿取即可。

转载于:https://www.cnblogs.com/muwu/p/9030531.html

laravel 的 scout elasticsearch ik laravel-scout-elastic 之间的关系与安装相关推荐

  1. es中修改某个字段值_搜索引擎之laravel中使用elasticsearch(一)

    一.概述 Elasticsearch官方提供了Composer包可直接引用就好,不过要注意:如果你使用的elastcsearch不是最新的那么我建议你指定合适的版本下载,而不要采用最新的,因为不同版本 ...

  2. docker + laravel项目使用elasticsearch进行全文检索功能

    Laravel项目使用Elasticsearch进行全文检索功能 博主用的是mac + docker,所以就用docker进行讲解 只需五步骤: • 启动 集成 ik 中文分词插件的 Elastics ...

  3. elastic ik分词搜索_php环境下使用elasticSearch+ik分词器进行全文搜索

    php中文网最新课程 每日17点准时技术干货分享 首先需要说明的一点是,如果需要启用ik分词器,那么分词器的版本必须与es版本一致,即6.3.0的分词器需要同样6.3.0版本的es支持. 安装java ...

  4. php elasticsearch ik,elasticsearch和analysis-ik的安装使用

    全文搜索和中文分词主要介绍了两组全文搜索加中文分词方案: TNTSearch+jieba-php这套组合对于博客这类的小项目基本够用了: 但是如果最求性能追求更强大的功能的话: 那更优的选择就非 el ...

  5. ik分词器 mysql php_php环境下使用elasticSearch+ik分词器进行全文搜索

    首先需要说明的一点是,如果需要启用ik分词器,那么分词器的版本必须与es版本一致,即6.3.0的分词器需要同样6.3.0版本的es支持. 安装java win-64bit的安装包需要去java英文官网 ...

  6. Elasticsearch+IK+pinyin自定义分词器

    本文环境 elasticsearch 7.4.0 ik 7.4.0 pinyin 7.4.0 安装ik分词器 IK分词器链接 下载 elasticsearch-analysis-ik-7.4.0.zi ...

  7. laravel基础课程---8、laravel响应和视图(响应是什么)

    laravel基础课程---8.laravel响应和视图(响应是什么) 一.总结 一句话总结: 就是向请求返回的响应数据(一般为html(视图),当然也可以是变量值):所有的路由及控制器必须返回某个类 ...

  8. laravel(二):laravel基本入门 看到Hello Laravel

    1.Hello World 首先,我们来添加一些文字,在页面中显示.为了能访问网页,要启动程序服务器. $ php artisan serve 上述命令会启动 PHP 内建的开发服务器,要查看程序,请 ...

  9. ElasticSearch IK 分词器快速上手

    简介: ElasticSearch IK 分词器快速上手 一.安装 IK 分词器 1.分配伪终端 我的 ElasticSearch 是使用 Docker 安装的,所以先给容器分配一个伪终端.之后就可以 ...

最新文章

  1. pycharm中使用anaconda中python环境
  2. 使用Webbrowser的一点心得体会
  3. 基于zookeeper实现分布式读写锁
  4. c语言取反运算详细步骤,C语言之位运算详解
  5. 黑马程序员_银行调度系统
  6. 使用网络监视器(IRSI)捕捉和分析协议数据包
  7. win10小娜_win10小娜打不开没反应怎么办
  8. linux常用命令-part3
  9. 2013.06.23《语法-方式状语》
  10. ubuntu依赖库下载(pkgs)
  11. 返利机器人分享话术_客户裂变-返利机器人回复语
  12. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——3.2 动态数据流...
  13. java计算机毕业设计基于安卓Android的校园单车租赁App
  14. Oracle OCP学习——Catalog的配置与使用
  15. oracle显示人民币,请问如何讲数字转变为大写人民币格式
  16. 融系统中PBOC/EMV的TLV的算法实现(含C++/C#)
  17. 查看mysql数据库引擎
  18. 基于QT 实现机器视觉软件
  19. layui上传文件php上传接口异常,layui.upload上传图片报错“请求上传接口出现异常”...
  20. 开发小白入职第一天流程

热门文章

  1. map组件如何展示marker的callout气泡
  2. 天下武功唯快不破,实时分析让企业决策又快又准
  3. (十进制快速幂+矩阵优化)BZOJ 3240 3240: [Noi2013]矩阵游戏
  4. 360小程序搭载浏览器,再创PC时代又一春
  5. 路由器接口管理 控制端口 辅助端口 物理端口 逻辑端口 局域网
  6. 3dmax导出3ds具有过多要导出的面超过64k解决方法
  7. mongoose populate 填充
  8. php环境下,两种汇率接口,已经测试通过
  9. Contiki教程——进程
  10. kali Linux的简单介绍