Elasticsearch 的一些官方解释和一些名词性质的东西就不在讲解了:注意的一点就是在面试中常问的几点,倒排索引ES7之前 和 ES7之后的区别、幂等性、RESTful 、为何选择ES而不是其它的搜索引擎、和mysql数据库做对比。这些百度即可此处不做说明!

一、ES、kibana的安装

1.1采用最简单的Docker安装

# ES7的docker文件
version: "3.1"
services:
  elasticsearch:
    image: daocloud.io/library/elasticsearch:7.6.2
    restart: always
    container_name: elasticsearch
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大
    ports:
      - 9200:9200
  kibana:
    image: daocloud.io/library/kibana:7.6.2
    restart: always
    container_name: kibana
    ports:
      - 5601:5601
    environment:
      - elasticsearch_url=http://39.105.25.114:9200
    depends_on:
      - elasticsearch
# ES6的docker文件
version: '2'
services:
  elasticsearch:
    container_name: elasticsearch
    image: daocloud.io/library/elasticsearch:6.5.4
    ports:
      - "9200:9200"
    environment:
      - "ES_JAVA_OPTS=-Xms64m -Xmx128m"
      - "discovery.type=single-node"
      - "COMPOSE_PROJECT_NAME=elasticsearch-server"
    restart: always

  kibana:
    container_name: kibana
    image: daocloud.io/library/kibana:6.5.4
    ports:
      - "5601:5601"
    restart: always
    environment:
      - ELASTICSEARCH_HOSTS=39.105.25.114:9200

 启动命令是:docker-compose up -d 

注意:

1.如果你买的是阿里的2核2G的服务器,把其它安装的应用全部停掉,否者会导致ES一直重启,服务器内存不够导致;开放对应的端口号

2.自学使用可以去安装VM使用,百度有一堆的教程。

3.ES安装成功网站访问      http://192.168.95.128:9200       

 表示安装ES成功。

4.kibana安装成功后访问:http://192.168.95.128:5601/

 点击次处进入。

5.在内存不足的时候(临时的分配内存)输入命令

#内存不足的时候(临时的分配内存)
sysctl -w vm.max_map_count=262144

6.所有的IP地址换成你自己的 

二、安装ik分词器

 2.1下载IK分词器

进去到ES容器内部,跳转到bin目录下,执行bin目录下的脚本文件:

#查看应用
docker ps
#进入应用内部
docker exec -it XXX bash
#进入目录
cd bin
  • 进去到ES容器内部,跳转到bin目录下,执行bin目录下的脚本文件:

  • 可能会出现下载失败,多式几次即可,

  • ES6的安装: ./elasticsearch-plugin install http://tomcat01.qfjava.cn:81/elasticsearch-analysis-ik-6.5.4.zip

  • ES7的安装: ./elasticsearch-plugin install  https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip

  • [root@618f16566ef6 bin]# ./elasticsearch-plugin install  https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
    -> Installing https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
    -> Downloading https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
    [=================================================] 100%?? 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @     WARNING: plugin requires additional permissions     @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    * java.net.SocketPermission * connect,resolve
    See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
    for descriptions of what these permissions allow and the associated risks.

    Continue with installation? [y/N]y
    -> Installed analysis-ik
    [root@618f16566ef6 bin]# 

  • 重启ES的容器,让IK分词器生效。

    #重启应用
    docker restart xxx

     我使用的是ES7,之后的增删改查都在这里面操作

 三、ES的基本操作

3.1 ES的结构

3.1.1 索引Index,分片和备份

  • ES的服务中,可以创建多个索引。

  • 每一个索引默认被分成5片存储。

  • 每一个分片都会存在至少一个备份分片。

  • 备份分片默认不会帮助检索数据,当ES检索压力特别大的时候,备份分片才会帮助检索数据。

  • 备份的分片必须放在不同的服务器中。

3.1.2类型Type 

类型是文档逻辑容器,在ES 7.0 以及之后的版本中 Type 被废弃了。

一个 index 中只有一个默认的 type,即 _doc;

3.1.3属性Field 

一个文档中,可以包含多个属性。类似于MySQL表中的一行数据存在多个列  

 3.2 ES 索引的操作index(相当于MySQL的数据库)

3.2.1创建一个索引 

语法如下

number_of_shards 指定分片数 5

number_of_replicas 备份数 1

#创建一个索引
PUT /user
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 5
  }  

3.2.2查看索引

GET /user 

3.2.3删除索引

DELETE /user 

 注意:该操作是在Kibana中操作的 你也可以在Postman中去操作,直接发送对应的请求即可,百度上有好多的对应操作;

3.3 ES中Field可以指定的类型

  • 字符串类型:

    • text:一把被用于全文检索。 将当前Field进行分词。

    • keyword:当前Field不会被分词。

  • 数值类型:

    • long:取值范围为-9223372036854774808~922337203685477480(-2的63次方到2的63次方-1),占用8个字节

    • integer:取值范围为-2147483648~2147483647(-2的31次方到2的31次方-1),占用4个字节

    • short:取值范围为-32768~32767(-2的15次方到2的15次方-1),占用2个字节

    • byte:取值范围为-128~127(-2的7次方到2的7次方-1),占用1个字节

    • double:1.797693e+308~ 4.9000000e-324 (e+308表示是乘以10的308次方,e-324表示乘以10的负324次方)占用8个字节

    • float:3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,e-45表示乘以10的负45次方),占用4个字节

    • half_float:精度比float小一半。

    • scaled_float:根据一个long和scaled来表达一个浮点型,long-345,scaled-100 -> 3.45

  • 时间类型:

    • date类型,针对时间类型指定具体的格式

  • 布尔类型:

    • boolean类型,表达true和false

  • 二进制类型:

    • binary类型暂时支持Base64 encode string

  • 范围类型:

    • long_range:赋值时,无需指定具体的内容,只需要存储一个范围即可,指定gt,lt,gte,lte

    • integer_range:同上

    • double_range:同上

    • float_range:同上

    • date_range:同上

    • ip_range:同上

  • 经纬度类型:

    • geo_point:用来存储经纬度的

  • ip类型:

    • ip:可以存储IPV4或者IPV6

3.4创建索引并指定数据结构 

#创建索引指定数据结构
PUT /book
{
  "settings": {
    # 备份数
    "number_of_replicas": 1,
    # 分片数
    "number_of_shards": 5
  },
   # 指定数据结构
  "mappings": {
   # 文档存储的Field
    "properties": {
      # Field属性名
      "name": {
        #类型
        "type": "text",
        #指定分词器
        "analyzer": "ik_max_word",
        #指定当前Field可以被作为查询的条件
        "index": true,
        #是否需要额外存储
        "store": false
      },
      "author": {
        "type": "keyword"
      },
      "count": {
        "type": "long"
      },
      "on-sale": {
        "type": "date",
        #时间类型的格式化方式
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      },
      "descr": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }

注意:1.这是ES7之后的方式,ES7之前需要加上下面指定类型

"mappings": {

# 类型 Type

  "novel": {
   # 文档存储的Field
    "properties": {

2. 在Kibana中查看添加的数据的方式:

第一步:

第二步: 

 第三步:

 第四步:

3.使用时把里面的注释删掉 我在里面做的是解释;

 3.5文档的操作

_index、_id、_type锁定一个文档

3.5.1新建文档

自动生成id

POST /book/_doc
{
  "name":"西游记",
  "author":"吴承恩",
  "count":10000,
  "on-sale":"2022-01-16",
  "descr":"看俺老孙一棒"
}

手动指定id

# 添加文档,手动指定id
PUT /book/_doc/1
{
  "name": "红楼梦",
  "author": "曹雪芹",
  "count": 10000000,
  "on-sale": "1985-01-01",
  "descr": "一个是阆苑仙葩,一个是美玉无瑕"
}

3.5.2修改文档

覆盖式的修改

 # 添加文档,手动指定id
PUT /book/_doc/1
{
  "name": "红楼梦",
  "author": "曹雪芹",
  "count": 4353453,
  "on-sale": "1985-01-01",
  "descr": "一个是阆苑仙葩,一个是美玉无瑕"
}

 doc的修改方式

POST /book/_doc/1/_update
{
   "doc": {
    "count":111111
  }
}

3.5.3删除文档

#根据id删除

DELETE /book/_doc/1 

 下面链接的是JAVA中的整合

(6条消息) 将“Elasticsearch“ 和 “SpringBoot“ 做整合,对 “ElasticsearchRestTemplate“ 的一些API做简单的测试。_momoxiaobaixh的博客-CSDN博客icon-default.png?t=M0H8https://blog.csdn.net/momoxiaobaixh/article/details/122591875?spm=1001.2014.3001.5501

====================本文未完成之后会跟新在Java中的操作===================

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐