elasticsearch的安装与使用

 

1:官网进行下载

https://www.elastic.co/cn/elasticsearch/

  

 

 

 2:这里我用的是7.15.2 

 3:进行下载解压至d 盘

 4:接下来我们cmd 切换目录进行运行

5:打开浏览器进行查看

使用http://127.0.0.1:9200/

6:我们进行看一看我们的索引是否添加成功

http://127.0.0.1:9200/_cat/indices?v

接下来我们继续Kibana 的安装 安装一定要版本一定要匹配 Elasticsearch7.15.2   匹配 Kibanah7.15.2 

Kibana是Elastic Stack家族内的一部分,它是一个管理网站,与ES(Elastic Search)集成可以用来管理ES的索引,除ES外它还可以跟Elastic家族的其他组件进行整合如logstash、Elasticsearch-Hadoop等。

相比我们之前讲过的elasticsearch-head,Kibana的功能要强大的多,更重要的是,Kibana为初学者准备了13059条的航班线路数据供我们使用。

1. 下载

标准版: https://artifacts.elastic.co/downloads/kibana/kibana-6.4.1-windows-x86_64.zip

免费版:https://artifacts.elastic.co/downloads/kibana/kibana-oss-6.4.1-windows-x86_64.zip

前者包含收费部分,但是需要申请一个30天试用期的许可证书,后者是符合Apache 2.0协议的免费版。本文使用了标准版,但是并未解锁商用部分的功能,没申请证书。

下载完解压到安装目录。

2:进行解压

 3::cmd 进行启动Kibana

 4:访问网址:

http://localhost:5601/

 5:进行搜索

 

接下来我们进行es 的增删该查 可以参考以下博客

laravel 框架中使用es

1: 新建索引

//ES客户端链接
    private $client;

    /**
     * 构造函数
     * MyElasticsearch constructor.
     */
    public function __construct()
    {
        $params = array(
            '127.0.0.1:9200'
        );
        $this->client = ClientBuilder::create()->setHosts($params)->build();
    }

    /**
     * 判断索引是否存在
     * @param string $index_name
     * @return bool|mixed|string
     */
    public function exists_index($index_name = 'mouth_test')
    {
        $params = [
            'index' => $index_name
        ];

        try {
            return $this->client->indices()->exists($params);
        } catch (\Elasticsearch\Common\Exceptions\BadRequest400Exception $e) {
            $msg = $e->getMessage();
            $msg = json_decode($msg,true);
            return $msg;
        }
    }

    /**
     * 创建索引
     * @param string $index_name
     * @return array|mixed|string
     */
    public function create_index($index_name = 'mouth_test') { // 只能创建一次
        $params = [
            'index' => $index_name,
            'body' => [
                'settings' => [
                    'number_of_shards' => 5,
                    'number_of_replicas' => 0
                ]
            ]
        ];

        try {
            return $this->client->indices()->create($params);
        } catch (\Elasticsearch\Common\Exceptions\BadRequest400Exception $e) {
            $msg = $e->getMessage();
            $msg = json_decode($msg,true);
            return $msg;
        }
    }

2:书写一个路由,进行测试

   Route::get('create_index','EsController@create_index');

 

3:访问http://127.0.0.1:9200/_cat/indices?v 是否新建索引(也就是一个表)成功

 

 5:larvelel 安装es组件

composer require elasticsearch/elasticsearch

 4:接下来,我们进行数据的添加

 /**
     * 添加文档(数据)
     * @param $id
     * @param $doc ['id'=>100, 'title'=>'phone']
     * @param string $index_name  就是创建的表名称
     * @param string $type_name
     * @return array
     */
    public function add_doc($id,$doc,$index_name = 'mouth_test',$type_name = 'goods') {
//        添加的数据
        $data=[
            'id' => 1,
            'username' => '王越',
            'password' => 'admin',
        ];

        $params = [
            'index' => $index_name,
            'type' => $type_name,
            'id' => $data['id'],  //添加数据的唯一标识id
            'body' => $data// 添加的数据
        ];

        $response = $this->client->index($params);
        return $response;
    }

 写路由进行测试并进行访问

//    添加的数据
    Route::get('add_doc','EsController@add_doc');

 

 

 接下来我们进行查看数据是否添加一致     浏览器访问:   http://localhost:9200/ + 索引名称+类型+id 进行访问

例如:http://localhost:9200/mouth_test/goods/1

 

 

 5:搜索 及标红

  /**
     * 搜索文档 (分页,排序,权重,过滤)
     * @param string $index_name
     * @param string $type_name
     * @param array $body
     * $body = [
    'query' => [
    'bool' => [
    'should' => [
    [
    'match' => [
    'cate_name' => [
    'query' => $keywords,
    'boost' => 4, // 权重大
    ]
    ]
    ],
    [
    'match' => [
    'goods_name' => [
    'query' => $keywords,
    'boost' => 3,
    ]
    ]
    ],
    [
    'match' => [
    'goods_introduce' => [
    'query' => $keywords,
    'boost' => 2,
    ]
    ]
    ]
    ],
    ],
    ],
    'sort' => ['id'=>['order'=>'desc']],
    'from' => $from,
    'size' => $size
    ];
     * @return array
     */
    public function search_doc($index_name = "mouth_test",$type_name = "goods",$body=[]) {
        $keyWord='王越';  //要搜索的关键字
        $params = [
            'index' => $index_name, //搜索的索引名,也就是表名
            'type' => $type_name, // 类型
            'body'  => [
            'query' => [
                'match' => [
                    'username'=>[
                        'query' => $keyWord  //要搜索的关键字
                    ]
                ]
            ],
//                搜索标红
                'highlight'=>[
                    'fields'=>[
                        'username'=>[
                            'pre_tags'=>[
                                '<span style="color: red">'
                            ],
                            'post_tags'=>[
                                '</span>'
                            ]
                        ]
                    ]
                ]
    ]
        ];

        $results = $this->client->search($params);
        foreach ($results['hits']['hits'] as $key => $item)
        {
            $results['hits']['hits'][$key]['_source']['username'] = $item['highlight']['username'][$key];
        }
        $results = array_column($results['hits']['hits'], '_source');
        print_r($results) ;

    }

定义一个路由并进行访问

   //搜索
    Route::get('search_doc','EsController@search_doc');

 

 

 6:接下来我们进行测试修改的数据

   /**
     * 更新文档
     * @param int $id
     * @param string $index_name
     * @param string $type_name
     * @param array $body ['doc' => ['title' => '苹果手机iPhoneX']]
     * @return array
     */
    public function update_doc($id = 1,$index_name = 'test_ik',$type_name = 'goods', $body=[]) {
// 可以灵活添加新字段,最好不要乱添加
        $data=[
            'id' => 1,
            'username' => '王越6666666',
            'password' => '11111888888',
            ];
        $params = [
            'index' => 'mouth_test',
            'type' => 'goods',
            'id' => $data['id'],  //根据数据的唯一标识id,进行更改数据,这里我测试的就是数据库的数据id;
            'body' => [           //修改的数据
                'username' => $data['username'],
                'password' => $data['password'],
            ]
        ];
        $response = $this->client->index($params);
        return $response;
    }:

书写路由并进行访问

  //修改
    Route::get('update_doc','EsController@update_doc');

 

 

 我们浏览器进行访问

 

 

 7:我们进行测试删除

  /**
     * 删除文档
     * @param int $id
     * @param string $index_name
     * @param string $type_name
     * @return array
     */
    public function delete_doc($id = 1,$index_name = 'mouth_test',$type_name = 'goods') {
        $data=[
            'id' => 2,
        ];
        $params = [
            'index' => 'mouth_test',
            'type' => 'goods',
            'id' => $data['id'],
        ];
        $response = $this->client->delete($params);
        return $response;

    }

书写路由并访问

    //删除
    Route::get('delete_doc','EsController@delete_doc');

 

 

  我们浏览器进行访问

 

 

 有一篇博客其实我已经封装好啦,直接调用也可以

https://www.cnblogs.com/xiaoyantongxue/p/15352474.html

当然啦,我们也可以参考这个人的博客

https://blog.csdn.net/J2778322217/article/details/122813619?spm=1001.2014.3001.5502

https://blog.csdn.net/daxianyu666/article/details/122029561?spm=1001.2014.3001.5502

https://www.cnblogs.com/jerry-min/p/14547736.html

 

posted @ 2022-02-27 21:23  王越666  阅读(189)  评论(0编辑  收藏  举报