composer require laravel/scout
会下载到laravel框架的vendor/laravle/scout目录下
2.在config/app.php配置providers
数组中:添加scout服务提供者
Laravel\Scout\ScoutServiceProvider::class,
3.注册好 Scout 的服务提供者之后,你可以使用 vendor:publish
Artisan 命令生成 Scout 的配置文件。这个命令会在你的 config
目录下生成 scout.php
配置文件:
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
这个命令的作用就是把/vendor/laravel/scout/config/scout.php配置文件复制到config目录下,scout服务的配置就在这个配置文件中。
此时laravel-scout扩展包就算安装好了。
我们一般使用elasticsearch作为全文搜索引擎
2.1 安装laravel-scout-elastic扩展包,这个就是操作elasticsearch的扩展包
composer require tamayo/laravel-scout-elastic
安装包会下载到vendor/tamayo/laravel-scout-elastic目录下
2.2在config/app.php的providers
数组中添加服务提供者
ScoutEngines\Elasticsearch\ElasticsearchProvider::class,
2.3修改scout配置文件,把驱动修改为elasticsearch并且配置索引和es服务地址
'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
//elasticsearch引擎的配置
'elasticsearch' => [
'index' => env('ELASTICSEARCH_INDEX', 'laravel54'),//这是索引名(相当于mysql的数据库)
'hosts' => [
env('ELASTICSEARCH_HOST', 'http://127.0.0.1:9200'),//这是es服务的地址
],
],
先确保elasticsearch服务可用,就是用浏览器访问http://127.0.0.1:9200,如果出现下面,表示服务正常
{
"name" : "vhr6l8u",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "fIwrtOj4SUyHxO9ddul4_g",
"version" : {
"number" : "5.1.1",
"build_hash" : "5395e21",
"build_date" : "2016-12-06T12:36:15.409Z",
"build_snapshot" : false,
"lucene_version" : "6.3.0"
},
"tagline" : "You Know, for Search"
}
我们和es服务交互时通过restfulAPI,通过http协议,所以引入Guzzle这个PHP HTTP客户端,他可以在php中直接发送各种的http请求
composer require guzzlehttp/guzzle
$client = new Client;
$url = "http://192.168.1.207/icar_dev101/miniapp.php/sstore/hot_goods_list/";
//get通过普通参数获取
$response = $client->get($url,['query' => ['sstore_id' => 1]]);
//post提交普通参数
$response = $client->post($url,['form_params'=>['id'=>2]]);
//post提交文件
$response = $client->post($url,['multipart'=>[
[
'name' => 'qux',//字段键名
'contents' => fopen('/path/to/file', 'r'),//文件句柄
'filename' => 'custom_filename.txt' //文件名
]
]]);
//put提交json
$response = $client->put($url, ['json' => ['foo' => 'bar']]);
//返回的是response对象,下面就是接口返回的数据
dd($response->getBody()->getContents());
{
"mappings":{
"articles":{
"properties":{
"id":{
"type":"integer"
},
"title":{
"type":"text"
},
"content":{
"type":"text"
},
"user_id":{
"type":"integer"
},
"updated_at":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss"
}
}
}
}
}
把这个json字符用put方式提交给http://localhost:9200/blog,系统会创建blog索引,类型是article,字段就是id,title等。可以用postman提交创建
php artisan make:command ESInit
会创建app\Console\Command\ESInit.php文件 ,可以看到一个属性protected $signature = 'es:init';则使用这个命令就用
php artisan es:init
//就会执行app\Console\Command\ESInit.php文件的handle方法
在app\Console\Kernel.php中挂载命令
protected $commands = [
\App\Console\Commands\ESInit::class,
];
修改编辑handle方法
public function handle()
{
$client = new Client;
//创建ES的索引
$url = config('scout.elasticsearch.hosts')[0].'/'.config('scout.elasticsearch.index');
//$client->delete($url);//删除这个索引
$param = [
"json"=>[
"mappings"=>[
"article"=>[
"properties"=>[
"title"=>[
"type"=>"keyword"
],
"content"=>[
"type"=>"text"
]
]
]
]
]
];
$client->put($url,$param);
$this->info("创建ES索引成功!");
}
使用命令 php artisan es:init 就会执行handle方法。根据配置创建一个索引,里面类型是article,字段有title,content
创建一个articlemodel,然后修改articlemodel类
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Article extends Model
{
use Searchable;
// 定义索引里面的type,相当于表
public function searchableAs(){
return 'article';
}
// 定义哪些字段需要搜索
public function toSearchableArray(){
return [
'title'=>$this->title,
'content'=>$this->content,
];
}
}
当我们的控制器使用App\Models\Article添加修改article表时,会对应修改到elasticsearch的索引blog,类型为articles里面的文档。scout.php配置文件配置了elasticsearch绑定的index和host.相当于指定了数据库。而类型则是在model里面绑定。
https://www.cnblogs.com/gangle/p/9328257.html
运行elasticsearch目录下的bin下面的elasticsearch.bat,然后访问http://127.0.0.1:9200
安装好(需要安装node.js和grunt),到/htdocs/elasticsearch-head-master目录下,执行
grunt server
就会启动head服务,访问http://localhost:9100/即可