ElasticSearch学习笔记(二) Elasticsearch安装及索引基础操作

235 阅读5分钟

前面了解了Elasticsearch的一些基本概念,现在我们开始学习怎么使用Elasticsearch。在使用之前先需要准备一个Elasticsearch环境,我们需要使用到Elasticsearch及Kibana(Kibana 是为 Elasticsearch设计的开源分析和可视化平台)。这里我们使用docker-compose在Linux环境中安装一套Elasticsearch及Kibana。

前期准备

Docker Compose 是 Docker 官方提供的一种工具,用于定义和运行多个 Docker 容器的应用程序。它基于 Docker 命令行工具,提供了一个简单的 YAML 文件格式,用于定义多个容器之间的关系和配置,然后可以使用单个命令来启动、停止和管理这些容器。使用 Docker Compose,可以轻松地管理和部署一个复杂的应用程序。

安装docker

 # 安装docker-ce版本
 yum install -y docker-ce
 # 启动docker并设置开机启动
 systemctl enable --now docker
 #查看docker版本
 docker --version

最后能够正常显示docker版本即表示docker安装成功

安装docker-compose

 curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
 ​
 chmod +x /usr/local/bin/docker-compose
 docker-compose --version

到这一步我们安装好了docker-compose环境,有了docker-compose我们可以快速的将Elasticsearch和Kibana安装完成。这里我们使用elasticsearch 7.11.2

Elasticsearch及Kibana安装

创建docker-compose文件

创建目录

 mkdir -p /opt/elasticsearch && cd $_
 vim docker-compose.yml

编写docker-compose.yml文件

 
 version: '3'
 
 services:
   elasticsearch:
     image: elasticsearch:7.11.2
     container_name: elasticsearch
     volumes:
     - ./config:/usr/share/elasticsearch/config  #esconfig持久化到本地
     - ./plugins:/usr/share/elasticsearch/plugins
     - ./data:/usr/shar/elasticsearch/data
     environment:
     - discovery.type=single-node
     - TZ=Asia/shanghai
     - ES_JAVA_OPTS= -Xms2g -Xmx2g  # 设置 JVM 内存参数
     ports:
     - "9200:9200"
     - "9300:9300"
     restart: always
   kibana:
     image: kibana:7.11.2
     container_name: kibana
     depends_on: # 服务依赖
      - elasticsearch
     environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 # 指定elasticsearch地址
      - elasticsearch.ssl.verify=false
      - TZ=Asia/shanghai
     ports:
      - "5601:5601"
     restart: always
 

使用 docker-compose up -d启动如图 image.png 到此我们就完成了Elasticsearch环境的安装工作,访问服务器地址加端口号 http://ip:5601即可访问到Kibana进行操作

Elasticsearch基础操作

索引操作

1.创建索引

在Kibana控制台中输入如下命令,并执行,如果创建的索引名称已经存在,会返回错误信息。

 ​
 PUT product-test
 ​
 # 返回结果
 {
   "acknowledged" : true, 
   "shards_acknowledged" : true,
   "index" : "product-test"
 }
字段含义
acknowledged索引操作是否成功: true-成功,false-失败
shards_acknowledged是否已成功将操作应用于所有相关的分片
index索引名称

创建一个带有类型及字段的索引

 PUT product-test
 {
     "settings": {
         "number_of_shards": 1,
         "number_of_replicas": 1
     },
     "mappings": {
         "properties": {
             "name": {
                 "type": "text"
             },
             "image": {
                 "type": "keyword"
             },
             "price": {
                 "type": "double"
             },
             "quantity":{
               "type":"integer"
             }
         }
     }
 }

这里我们创建了一个分片数和副本数都为1的索引,里面包含5个字段: 商品名称(name),商品图片(image),商品价格(price), 库存数量(quantity),类型各不相同。

在实际使用中Elasticsearch的分片和副本数的选择应该考虑以下几个因素:

  1. 数据量:如果你的数据量很小,可以选择较少的分片和副本数。但如果数据量很大,就需要增加分片和副本数来提高搜索效率和可用性。
  2. 查询负载:如果你的查询负载很大,可以增加分片和副本数来分散查询负载,提高搜索效率。但如果查询负载很小,可以选择较少的分片和副本数。
  3. 硬件资源:分片和副本数的增加会占用更多的硬件资源,包括磁盘空间、内存和CPU等。因此,在选择分片和副本数时需要考虑硬件资源的限制。
  4. 可用性:增加副本数可以提高系统的可用性,因为当某个节点故障时,其他副本可以继续提供服务。但是,增加副本数也会占用更多的硬件资源。

综上所述,选择分片和副本数需要根据具体的业务需求和硬件资源来进行权衡。一般来说,建议在数据量较大、查询负载较高、硬件资源充足的情况下增加分片和副本数,以提高搜索效率和可用性。

2.查看索引

查看Es集群中所有索引信息使用如下命令

 GET /_cat/indices?v

其中,GET为HTTP请求方法,/_cat/indices为API的路径,v表示以表格形式输出结果,可以更清晰地查看索引的相关信息。

执行该请求后,Es会返回一个表格,包含当前集群中所有索引的相关信息,例如索引名称、状态、分片数、副本数、文档数、存储大小等。这些信息可以用于监控和管理集群中的索引。

 #查看单个索引
 ​
 GET product-test
 ​
 # 返回结果
 {
   "product-test" : {
     "aliases" : { },
     "mappings" : { },
     "settings" : {
       "index" : {
         "routing" : {
           "allocation" : {
             "include" : {
               "_tier_preference" : "data_content"
             }
           }
         },
         "number_of_shards" : "1",
         "provided_name" : "product-test",
         "creation_date" : "1686209323359",
         "number_of_replicas" : "1",
         "uuid" : "gk1bWBr-SQSOdkikbqbZnA",
         "version" : {
           "created" : "7120099"
         }
       }
     }
   }
 }
字段含义
aliases别名
number_of_shards主分片数量
number_of_replicas副本分片数量
version当前索引的版本,每一次修改,版本会跟着变化

获取索引中所有类型的字段信息

 GET product-test/_mapping
 ​
 #返回结果
 {
   "product-test" : {
     "mappings" : {
       "properties" : {
         "name" : {
           "type" : "text"
         },
         "picture_url" : {
           "type" : "keyword"
         },
         "price" : {
           "type" : "double"
         },
         "quantity" : {
           "type" : "integer"
         }
       }
     }
   }
 }
 ​

3.打开/关闭索引

 #关闭索引
 POST product-test/_close
 ​
 #开启索引
 POST product-test/_open

被关闭的索引是无法对索引的文档进行操作的

4.删除索引

 DELETE product-test
 ​
 #返回
 {
   "acknowledged" : true
 }
 ​