elasticsearch的安装,以及中文分词的安装,前面几篇文章都详细的说到了。
1,安装laravel/scout
composer require laravel/scout
//修改config/app.php
'providers' => [
//es search 加上以下内容
Laravel\Scout\ScoutServiceProvider::class,
]
2,安装scout的es驱动
composer require tamayo/laravel-scout-elastic
3,配置scout
3.1,注册好 Scout 的服务提供器之后,你还需使用Artisan 命令 vendor:publish 生成 Scout 的配置文件
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider" //注意providers加好在执行,不然没有scout.php
3.2,修改config/app.php
'providers' => [
//es search 加上以下内容
Laravel\Scout\ScoutServiceProvider::class,
ScoutEngines\Elasticsearch\ElasticsearchProvider::class,
]
3.3,修改config/scout.php
'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
'elasticsearch' => [
'index' => env('ELASTICSEARCH_INDEX', 'question1'),
'hosts' => [
env('ELASTICSEARCH_HOST', 'http://localhost:9200'),
],
],
4,创建elasticsearch的索引和模板
4.1,创建,创建es索引和模板的php文件
php artisan make:command ESInit //创建一个ESInit.php
4.2,安装Guzzlehttp
composer require Guzzlehttp/guzzle
4.3,修改app/console/Commands/ESInit.php
<?php
namespace App\Console\Commands;
use GuzzleHttp\Client;
use Illuminate\Console\Command;
class ESInit extends Command {
protected $signature = 'es:init';
protected $description = 'init laravel es for question';
public function __construct() { parent::__construct(); }
public function handle() { //创建template
$client = new Client();
$url = config('scout.elasticsearch.hosts')[0] . '/_template/question1'; $client->delete($url);
$params = [
'json' => [
'template' => config('scout.elasticsearch.index'),
'settings' => [
'number_of_shards' => 5
],
'mappings' => [
'_default_' => [
'dynamic_templates' => [
[
'strings' => [
'match_mapping_type' => 'string',
'mapping' => [
'type' => 'text',
'analyzer' => 'ik_smart',
'ignore_above' => 256,
'fields' => [
'keyword' => [
'type' => 'keyword'
]
]
]
]
]
]
]
]
]
];
$client->put($url, $params);
// 创建index
$url = config('scout.elasticsearch.hosts')[0] . '/' . config('scout.elasticsearch.index');
if($client->head($url)){
$client->delete($url);
}
$params = [
'json' => [
'settings' => [
'refresh_interval' => '5s',
'number_of_shards' => 5,
'number_of_replicas' => 0
],
'mappings' => [
'_default_' => [
'_all' => [
'enabled' => false
]
]
]
]
];
$client->put($url, $params);
}
}
4.4,加载ESInit.php,修改app/console/Kernel.php
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\Log ;
use Illuminate\Support\Facades\App ;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
\App\Console\Commands\ESInit::class //加上
];
4.5,创建es索引和模板
php artisan es:init
4.6,查看模板和索引
$ curl -XGET "http://127.0.0.1:9200/_template/template_1/?pretty" //查看模板
{
"template_1" : {
"order" : 0,
"index_patterns" : [
"question1"
],
"settings" : {
"index" : {
"number_of_shards" : "5"
}
},
"mappings" : {
"_default_" : {
"dynamic_templates" : [
{
"strings" : {
"match_mapping_type" : "string",
"mapping" : {
"type" : "text",
"analyzer" : "ik_smart",
"ignore_above" : 256,
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
}
}
}
]
}
},
"aliases" : { }
}
}
$ curl -XGET 'localhost:9200/question1/?pretty' //查看mapping
{
"question1" : {
"aliases" : { },
"mappings" : {
"_default_" : {
"_all" : {
"enabled" : false
},
"dynamic_templates" : [
{
"strings" : {
"match_mapping_type" : "string",
"mapping" : {
"analyzer" : "ik_smart",
"fields" : {
"keyword" : {
"type" : "keyword"
}
},
"ignore_above" : 256,
"type" : "text"
}
}
}
]
},
"question1" : {
"_all" : {
"enabled" : false
},
"dynamic_templates" : [
{
"strings" : {
"match_mapping_type" : "string",
"mapping" : {
"analyzer" : "ik_smart",
"fields" : {
"keyword" : {
"type" : "keyword"
}
},
"ignore_above" : 256,
"type" : "text"
}
}
}
],
"properties" : {
"collect_num" : {
"type" : "long"
},
"content" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
},
"analyzer" : "ik_smart"
},
"title" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
},
"analyzer" : "ik_smart"
},
"type_id" : {
"type" : "long"
}
}
}
},
"settings" : {
"index" : {
"refresh_interval" : "5s",
"number_of_shards" : "5",
"provided_name" : "question1",
"creation_date" : "1526698224479",
"number_of_replicas" : "0",
"uuid" : "AAMqTdTKSSmGhs4lCEF5Iw",
"version" : {
"created" : "6020399"
}
}
}
}
}
5,同步数据到elasticsearch
5.1,创建表,在这里就不详细说了
5.2,创建models文件,php artisan make:model t_question1
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Laravel\Scout\Searchable;
class t_question1 extends Model
{
protected $table = 't_question1';
protected $primaryKey = 'question_id';
protected $guarded = [];
// 可以注入是的数据字段
protected $fillable = ['question', 'analysis', 'collect_num' , 'type_id' ];
use Searchable;
public function __construct()
{
parent::__construct();
}
// 定义索引里面的类型
public function searchableAs()
{
return 'question1';
}
// 定义有那些字段需要搜索
public function toSearchableArray()
{
return [
'title' => $this->question,
'content' => $this->analysis,
'collect_num' => $this->collect_num,
'type_id' => $this->type_id
];
}
}
5.3,将表里面的数据同步到索引中
$ php artisan scout:import "App\Models\t_question1" Imported [App\Models\t_question1] models up to ID: 25 All [App\Models\t_question1] records have been imported.
到这儿数据库的数据就同步到,我们的es中,在这里要注意,mapping中的字段,只能加不能减的,如果想减少字段,只能删除mapping重新建索引。关于laravel中对es数据的增,删,改查,后面会详细的说明。
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/php/1919.html
你好,想請教一下,
我依步驟執行完 php artisan es:init 後有在kibana 上看到index建立成功,
執行php artisan scout:import "App\Models\t_question1"後也有成功顯示訊息,
但數據資料卻沒有匯入,在kibana上數據是0條 。
請問這個問題是哪方面的錯誤,謝謝!
提示成功,有没有显示,成功的条数
你好,謝謝你的回覆,
有顯示成功的條數,但kibana上是0條,我後來發現是ik套件未安裝成功的問題導致,
現在試著重新安裝,有問題再請教你,非常感謝!