为什么要使用es
在一张有很多数据的表里进行查询会很慢,严重影响客户的体验,而且得到的搜索结果,不一定会符合用户的需求,在这样的情况下就轮到ElasticSearch排上用场了
下载
安装Elasticsearch之前需要安装配置好JDK,设置好环境变量$JAVA_HOME。不同版本对Java的依赖也有一点点差别,这个自行百度吧
下载ES
访问ES官网
选着自己需要的下载
在框架里则需要安装拓展
composer下载拓展命令
composer require elasticsearch/elasticsearch
运行测试
CD 刚刚下载的 bin目录下
运行 elasticsearch.bat 文件查看效果
访问图中的 127.0.0.1:9200 得到的
这样就运行成功了
框架里简单使用
安装拓展
上面已经写了安装拓展的命令这里就不再重复了
这里我用的是thinkphp6安装成功会在vendor目录下有一个elasticsearch
class Elasticsearch extends Controller
{
private $client;
public function __construct()
{
$this->client=ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
}
//创建索引 (表)
public function SearchAdd(){
// 创建索引
$params = [
// 生成索引的名称
'index' => 'users',
// 类型 body
'body' => [
'settings' => [
// 分区数
'number_of_shards' => 5,
// 副本数
'number_of_replicas' => 1
],
'mappings' => [
// 字段 类似表字段,设置类型
'properties' => [
//字段
'name' => [
'type' => 'text',// 数据类型
//standard 相当于数据查询是的 = 张三你好,必须找到张三你好
//ik_max_word 中文分词 张三你好 张三 你好 张三你好
'analyzer' => 'ik_max_word',// 分析器
'search_analyzer'=> 'ik_max_word'
],
'age' => [
'type' => 'integer'
],
]
]
]
];
// 创建索引
$response = $this->client->indices()->create($params);
dump($response);
exit();
}
//索引添加数据
public function AddSearch(){
$user=new UserModel();
$arr=$user->get()->toArray();
foreach ($arr as $k=>$v){
$params=[
'index'=>'user',
'type' => '_doc',
'id'=>$v['uid'],
'body'=>[
'uid'=>$v['uid'],
'uname'=>$v['uname'],
'upwd'=>$v['upwd'],
'rid'=>$v['rid'],
'img'=>$v['img']
],
];
$this->client->index($params);
}
exit();
}
//查询全部
public function indexAll(){
$params=[
'index'=>'user',
'type'=>'_doc'
];
$arr=$this->client->search($params);
return $arr;
}
//id查询
public function SearchGet(Request $request){
$arr=$request->get('id');
$arr=[1,2,3,4,5,6,7,8,12,13];
$data=[];
foreach ($arr as $k=>$v){
$params=[
'index'=>'user',
'type' => '_doc',
'id'=>$v,
];
$data[]=['rid'=>$v];
$data[$k]=$this->client->getSource($params);
}
return $data;
}
//高亮查询
public function HighligthGet(Request $request){
$Role=new RoleModel();
$count=$request->get('count');
$params=[
'index'=>'user',
'type' => '_doc',
'body'=>[
'query'=>[
'match'=>[
'uname'=>$count
]
],
'highlight'=>[
'fields'=>[
'uname'=>new \stdClass()
]
],
]
];
$results = $this->client->search($params);
$arr=[];
foreach ($results['hits']['hits'] as $k=>$v){
$arr[]=$v;
}
$data=[];
foreach ($arr as $k=>$v){
$data[$k]['id']=$v['_id'];
$data[$k]['uname']=$v['_source']['uname'];
$data[$k]['upwd']=$v['_source']['upwd'];
$data[$k]['rid']=$v['_source']['rid'];
$data[$k]['img']=$v['_source']['img'];
$data[$k]['highlight']=$v['highlight']['uname'][0];
}
// foreach ($data as $k=>$v){
// $data[$k]['rname']=$Role->where('rid',$v['rid'])->get()->toArray()[0]['rname'];
// }
print_r($data);exit();
}
至于es每一个参代表意思,拥有上面含义暂未理解