在上一篇文章中,我们介绍了 elasticsearch 及其插件的安装和基本配置。在这篇文章中我们将结合 Laravel Scout 介绍一下 elasticsearch 在实际应用场景中的使用。
什么是 scout,如何使用 scout
既然说到 Laravel Scout 那么什么是 laravel-scout 呢?基于官方的定义:laravel-scout 为 laravel 的 Eloquent 模型的全文搜索提供的基于驱动的简单的解决方案。通过对观察者模式的实现,scout 可以很轻易的将你的模型数据同步到你的搜索引擎中去。关于 scout 的安装和基本使用,你可以参考 Scout 全文搜索。
安装配置
这里的使用是基于你已经正确的安装和配置 scout 前提下的。另外由于 scout 只自带一个 Algolia 驱动,并未提供基于 elasticsearch 的驱动,所以这里所介绍是基于 babenkoivan/scout-elasticsearch-driver 这个驱动实现的。
安装
php
composer require babenkoivan/scout-elasticsearch-driver
配置驱动
使用下面的命令来发布你的驱动
php
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
php artisan vendor:publish --provider="ScoutElastic\ScoutElasticServiceProvider"
经过上边的步骤你的 config 文件夹中已经生成了 scout_elastic.php 文件,默认情况下它将包含如下的配置。
php
<?php
return [
'client' => [
'hosts' => [
//elasticearch服务的链接地址
env('SCOUT_ELASTIC_HOST', 'localhost:9200')
]
],
//是否自动更新映射
'update_mapping' => env('SCOUT_ELASTIC_UPDATE_MAPPING', true),
'indexer' => env('SCOUT_ELASTIC_INDEXER', 'single'),
'document_refresh' => env('SCOUT_ELASTIC_DOCUMENT_REFRESH')
];
创建索引配置文件
php
php artisan make:index-configurator Search\\Indexes\\PostsIndexConfigurator
配置信息
php
<?php namespace App\Search\Indexes;
use ScoutElastic\IndexConfigurator;
use ScoutElastic\Migratable;
class PostsIndexConfigurator extends IndexConfigurator
{
use Migratable;
//这里是索引的名称,默认情况下使用的是模型名称
protected $name = 'blog';
//这里是索引的配置,是典型的elasticsrarch风格。
protected $settings = [
'analysis' => [
'analyzer' => [
'es_std' => [
'type' => 'ik_smart', //这里是分词器,由于使用的中文所以使用的是ik_smart分词器
'stopwords' => '_chinese_'
]
]
]
];
}
创建搜索配置
php
php artisan make:search-rule Search\\Rules\\PostsIndexConfigurator
配置信息
php
<?php namespace App\Search\Rules;
use ScoutElastic\SearchRule;
class PostsSearchRule extends SearchRule
{
/**
* elasticsearch搜索关键词的高亮配置
*/
public function buildHighlightPayload()
{
return [
'fields' => [
'title' => [
'type' => 'plain'
],
'summary' => [
'type' => 'plain'
],
'content' => [
'type' => 'plain'
],
]
];
}
/**
* 查询条件,elasticsearch bool过滤器构建
* @inheritdoc
*/
public function buildQueryPayload()
{
return [
'must' => [
'multi_match' => [
'query' => $this->builder->query,
'fields' => ['title', 'summary','content'],
]
]
];
}
}
模型的配置使用
php
use Searchable;
//指明所使用的索引配置
protected $indexConfigurator = PostsIndexConfigurator::class;
//指明所使用的搜索配置
protected $searchRules = [
PostsSearchRule::class
];
//配置模型到elasticsearch的字段映射
protected $mapping = [
'properties' => [
'text' => [
'type' => 'text',
'fields' => [
'title' => [
'type' => 'text',
]
]
],
]
];
基本命令的使用
在配置好了如上的数据,你需要做的就是使用下边的命令来将数据导入到 elasticsearch 中使用了。
php
php artisan elastic:create-index Model//创建索引
php artisan scout:import Model//导入数据到索引中
实际的使用
通过上边的配置和数据迁移之后,在控制器中你只需下面一行就可以很方便的使用上 elasticsearch 的搜索服务了。
php
$posts = Posts::search($keyword)->where('is_valid', 1)->with('tags')->paginate(8);
到这里本文就结束了,上边只介绍了 babenkoivan/scout-elasticsearch-driver 的基本使用,关于其他的一些更详细的使用信息你可以点击 插件 Github 主页参考使用。