elasticsearch使用中文分词器
1、首先我们要把对应的分词器的版本下载下来,网址是:https://github.com/medcl/elasticsearch-analysis-ik/releases
安装: composer require elasticsearch/elasticsearch
2、将下载下来的压缩包解压,然后将文件复制到 es的安装目录/plugin/ik下面即可,没有的目录直接手动创建就行,完成之后效果如下
3、接下来,重新启动es就可以了
4、应用 - 创建索引
public function create_index(){
//创建es实例
$es = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
$params = [
'index' => '索引名称',//类似于库名
'body' => [
'settings' => [
'number_of_shards' => 3,
'number_of_replicas' => 2
],
'mappings' => [
'_source' => [
'enabled' => true
],
'properties' => [
//之后可以进行搜索的字段
'字段名称' => [
'type' => 'text',
"analyzer" => "ik_max_word",
"search_analyzer" => "ik_max_word"
]
]
]
]
];
//执行创建
$r = $es->indices()->create($params);
dump($r);
}
5、可以给索引中填充一些数据
public function add_goods_data(){
$data = User::all()->toArray();
$es = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
foreach ($data as $k=>$v){
$params = [
'index'=>'索引名称',//库
'type'=>'_doc',//表(额外需要注意的,这里是固定的写法)
'id'=>$v['id'],//主键
'body'=>$v//数据
];
$r = $es->index($params);
}
echo 'success';
}
6、应用 - 搜索
public function search_test(){
$word = $request->get('word');//接收关键字
$page = $request->get('page',1);//接收当前页(如果没接收到,默认是1) $size = 5;//每页显示条数
$limit = ($page-1)*$size;//偏移量
$client = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();//创建es实例
//设置查询的条件
$params = [
'index' => '索引名称',//索引(类似于库)
//'type' => '_doc',
'body' => [
//查询内容
'query' => [
'match' => [//匹配
'改成搜索字段' => $word//匹配字段
]
],
'highlight' => [//高亮
'pre_tags' => ["<em style='color: red'>"],//样式自己写
'post_tags' => ["</em>"],
'fields' => [
"改成搜索字段" => new \stdClass()
]
]
]
];
//分页限制
$params["size"] = $size;//每页显示条数
$params["from"] = $limit;//偏移量
$results = $client->search($params);//es搜索
foreach ($results['hits']['hits'] as $k=>$v){
$results['hits']['hits'][$k]['_source']['改成自己的搜索字段'] = $v['highlight']['改成自己的搜索字段'][0];
}
$data = array_column($results['hits']['hits'],'_source');
$arr['data'] = $data;//数据
$arr['page'] = $page;//当前页
$arr['total'] = $results['hits']['total']['value'];//总条数
$arr['last_page'] = ceil($results['hits']['total']['value']/$size);//总页数
print_r($arr);//剩下的就是前端展示的事情了
}