ElasticSearch在Larave中的使用
此笔记实在已经安装ElasticSearch服务在Laravel使用
安装Laravel,我这边安装的larave5.5(这个根据个人情况)
composer create-project --prefer-dist laravel/laravel esLaravel 5.5.*
测试Laravel运行Laravel
php artisan serve --port 8022
安装 laravel/scout
composer require laravel/scout
Scout 安装完成之后,你应该使用 vendor:publish Artisan 命令来生成 Scout 配置文件。这个命令将生成 scout.php 配置文件到你的 config 目录:
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
安装composer require tamayo/laravel-scout-elastic
composer require tamayo/laravel-scout-elastic
安装驱动必要条件Algolia
composer require algolia/algoliasearch-client-php
6.修改 scout.php 配置(/config/ scout.php)
修改
'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
//增加一个驱动
'elasticsearch' => [
'index' => env('ELASTICSEARCH_INDEX', 'laravel56_shop'),
'hosts' => [
env('ELASTICSEARCH_HOST', '127.0.0.1:9200'),
],
],
7.创建 mylaravel 的索引和模板,并把索引和模板进行关联
1.创建Command
php artisan make:command ESInit;#会生成一个 Console/Commands 文件夹和 ESInit.php 的文件
2.编辑handle
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class ESInit extends Command
{
/**
* 控制台命令的名称和签名。
*
* @var string
*/
protected $signature = 'es:init';
/**
* 控制台命令的描述
*
* @var string
*/
protected $description = 'init laravel elasticsearch for shopTitle';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
* 向ES中发送reset风格的请求
* @return mixed
*/
public function handle()
{
//创建template
$client = new Client();
$url = config('scout.elasticsearch.hosts')[0] . '/_template/tmp';
$params = [
'json' => [
'template' => config('scout.elasticsearch.index'),
'mappings' => [
'_default_' => [
'dynamic_templates' => [
[
'strings' => [
'match_mapping_type' => 'string',
'mapping' => [
'type' => 'text',
'analyzer' => 'ik_smart',
'fields' => [
'keyword' => [
'type' => 'keyword'
],
],
],
],
]
],
],
],
],
];
//想URL发送参数创建template
$client->put($url, $params);
//创建index
$url = config('scout.elasticsearch.hosts')[0] . '/' . config('scout.elasticsearch.index');
$params = [
'json' => [
'settings' => [
'refresh_interval' => '5s',
'number_of_shards' => 1,
'number_of_replicas' => 0,
],
'mappings' => [
'_default_' => [
'_all' => [
'enabled' => false
],
],
],
],
];
$client->put($url, $params);
}
}
8.挂载进入编辑 App\Console\Kernel.php
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
//
Commands\ESInit::class
];
使用命令 php artisan 检查该命令是否生效
导入数据库中已有的数据到 ElasticSearch
创建模型 php artisan make:model Models/Product
product.php 中
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Product extends Model
{
use Searchable;
/**
* 定义索引里的type值,重写
* @return string
*/
public function searcheableAs()
{
return "product";
}
/**
* 定义那些字段需要搜索
* @return array
*/
public function searchableArray()
{
return [
'title' => $this->title,
'descr' => $this->introduce
];
}
}
导入 product 数据
使用命令 php artisan scout:import “App\Models\Product”#就可以将数据库中的数据导入
在es终端可以看到
在浏览器验证