ES搜索、分词器

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);//剩下的就是前端展示的事情了

    }

复制代码

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值