ElasticSearch 7.14.0(适合小白的万字笔记!持续更新)

目录

前言

1.ElasticSearch

1.安装、解压

2.目录介绍

3.启动

2.Kibana

1.安装、解压、启动

3.三个核心概念

1.索引(Index)

2.映射(Mapping)

3.文档(Document)

4.基本操作

1.索引

查询

创建

不指定配置创建(yellow)

指定配置创建(green)

删除

2.映射

创建索引&映射

查询映射信息

3.文档 

添加文档&查询

​删除文档

 更新文档

方式一

方式二 

批量操作 

批量添加文档

添加、更新、删除

5.高级查询 DSL

 查询所有[match all]

 关键词查询[term]

范围查询[range]

前缀查询[prefix]

通配符查询[wildcard]

 多id查询[ids]

模糊查询[fuzzy]

布尔查询[bool]

 *多字段查询[multi_match]

 默认字段分词查询[query_string]

 高亮查询[highlight]

返回指定条数[size]

分页查询[size,from]

指定字段排序[sort]

返回指定字段[_source]

过滤查询[filter]

6.索引原理

倒排索引

索引模型

7.分词器

中文分词器

安装IK

IK使用

拓展词和停用词

8.整合SpringBoot

yml

es配置类

es工具类(可选)

1.创建索引和映射

2.删除索引

3.添加一条文档

4.基于id更新文档

5.基于id查文档

*6.查询该索引所有文档

​6.1查询所有(文档不超过一万)

6.2查询所有(超过一万)

滚动查询

 9.集群


前言

        这篇文章是个人在es学习过程中从0-1记录的,非常适合于刚入门的小伙伴,文章涵盖了es和kibana的安装、es基本概念、基础操作、整合SpringBoot、集群等。记录之初是为了加深学习印象。文中包含个人理解如有错误欢迎指出~

1.ElasticSearch

1.安装、解压

我是macos系统,本次安装使用传统tar包方式安装,下载地址:Elasticsearch 7.14.0 | Elastic

elasticsearch要求jdk是11及以上,没有该版本最好安装一下(虽然elasticsearch自带默认jdk)

下载tar包完成后,可以把它移动到自定义目录进行解压。

tar -zxvf elasticsearch-7.14.0-darwin-x86_64.tar.gz

2.目录介绍

待补充。。

3.启动

进入到安装目录的bin目录下,执行elasticsearch(执行./elasticsearch -d 是后台启动)

v_x@v-xeMacBook-Pro elasticsearch-7.14.0 % cd bin
v_x@v-xeMacBook-Pro bin % ls
elasticsearch				elasticsearch-env-from-file		elasticsearch-saml-metadata		elasticsearch-syskeygen
elasticsearch-certgen			elasticsearch-geoip			elasticsearch-service-tokens		elasticsearch-users
elasticsearch-certutil			elasticsearch-keystore			elasticsearch-setup-passwords		x-pack-env
elasticsearch-cli			elasticsearch-migrate			elasticsearch-shard			x-pack-security-env
elasticsearch-croneval			elasticsearch-node			elasticsearch-sql-cli			x-pack-watcher-env
elasticsearch-env			elasticsearch-plugin			elasticsearch-sql-cli-7.14.0.jar
v_x@v-xeMacBook-Pro bin % ./elasticsearch

如果在日志中看到以下信息,说明启动成功。

默认端口是9200,tcp端口是9300。

打开另一个终端窗口,执行ps -ef |grep elasticsearch 查看进程是否启动。

执行curl http://localhost:9200,出现以下内容,连接成功启动后的es不允许远程连接,需要修改/config/elasticsearch.yml

再次启动,但发现如下错误(注意:不同系统可能出现不同错误)这个错误是说,如果允许远程连接,es是默认集群启动,需要去修改配置,当前我只想单机启动。修改/config/elasticsearch.yml

2.Kibana

Kibana 是一个针对Elasticsearch 的开源分析及可视化平台,使用Kibana可以 查询、查看并与存储在ES索引的数据进行交互操作,使用Kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。Kibana与Elasticsearch的关系可以理解为Navicat与Mysql。

1.安装、解压、启动

下载

Kibana 7.14.0 | Elastic

安装

tar -zxvf kibana-7.14.0-darwin-x86_64.tar.gz

修改kibana配置文件 /config/kibana.yml

修改如下配置

server.host: "0.0.0.0"    # 开启kibana远程访问
elasticsearch.hosts: ["http://localhost:9200"]  #ES服务器地址

启动kibana

./bin/kibana

我这里在启动过程中出现一个错误,是因为配置文件中localhost多打了一个s。。

修改后,正常启动

访问 http://localhost:5601/,出现以下画面,连接成功。

通过侧边栏找到 dev tools

发送请求,能拿到响应结果说明所有安装、配置都是正确的

3.三个核心概念

ES6有一个 类型 的概念,在7中移除。

1.索引(Index)

"一个索引就是一个拥有几分相似特征的文档的集合"。比如说,你可以有一个商品数据的索引,一个订单数据的索引,还有一个用户数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。可以简单理解为 es中的索引类似于mysql中的表,一个索引就是一张表。

2.映射(Mapping)

"映射是定义一个文档和它所包含的字段如何被存储和索引的过程",在默认配置下,ES可以根据插入的数据 自动地创建mapping,也可以手动创建mapping。mapping中主要包括字段名,字段类型等。可以简单理解为 es中的映射类似于mysql表的schema,es中不需要指定字段长度。

3.文档(Document)

"文档是索引中存储的一条条数据"。一条文档是一个可被索引的最小单元 。ES中的文档采用了轻量级的JSON格式数据来表示。可以简单理解为 es索引中的一个文档类似于mysql表的一条数据。

4.基本操作

1.索引

索引在es中只能创建、删除,不能修改

查询

# 查询es所有索引
get /_cat/indices

# 查询es所有索引,显示title
get /_cat/indices?v

# health:健康状态,氛围red,green,yellow,如果是red状态,代表不可用
# status:状态,默认是开启的
# index:索引,.开头的都是临时索引,是不可见的,是kibana连接es时需要用到的,每次启动可能都不一样
# uuid:索引的唯一标识
# pri:primary缩写,代表索引主分片
# rep:replica缩写,代表副本分片
# docs.count:文档数
# docs.deleted:删除
# store.size:存储大小
# pri.store.size:主分片索引大小或主索引大小

创建

不指定配置创建(yellow)
# PUT /索引名
PUT /products

索引创建成功,但健康状态是yellow,因为es在创建索引时,默认会备份,但当前是单机部署,所以主分片和从分片都是同一台机器,如果机器宕机,主从数据都会丢失,那么备份就失去意义,所以状态是yellow。

指定配置创建(green)
# PUT /索引名
# 指定主分片数量为1,副本为0,这样创建的index健康状态是green
PUT /orders
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas":0
  }
}

删除

# DELETE /索引名
DELETE /products

2.映射

映射脱离索引是没有意义的,所以创建过程中要创建索引。

映射是无法修改的,如果映射写错了,就要删除索引重新创建。

创建索引&映射

 es有丰富的数据类型,举几个例子:

  • 字符串类型:keyword 关键字、text 文本
  • 数字类型:integer、long
  • 小数类型:float、double
  • 布尔类型:boolean
  • 日期类型:date   

在es中,除了text 分词,其余类型均不分词

PUT /products
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas":0
  }
  , "mappings": {
      "properties": {
        "id": {
          "type": "integer"
        },
        "title": {
          "type": "text"
        },
        "price": {
          "type": "double"
        },
        "create_at": {
          "type": "date"
        },
        "description": {
          "type": "keyword"
        }
      }
  }
}

查询映射信息

# GET /索引名/_mapping
GET /products/_mapping

3.文档 

添加文档&查询

# 指定文档id
POST /products/_doc/1  
{
  "id" : 1,
  "title": "蘑古力",
  "price": 3.5,
  "description": "好吃"
}

# 不指定文档id,自动使用uuid
POST /products/_doc  
{
  "title": "可比克",
  "price": 2.5,
  "description": "也好吃"
}

 添加成功

 基于id查询

 删除文档

# 指定文档id
DELETE /products/_doc/1  

 更新文档

方式一

使用PUT

# 指定文档id,json是要更新的内容
PUT /products/_doc/1  
{
  "title": "蘑古力力"
}

 更新成功后再查询一次,发现的确更新了,但其他字段没有了

 所以这种更新方式,是先删除原文档,再添加新文档

方式二 

使用POST

# 指定文档id和字段更新,其余字段保持不变
# doc是指定写死的
POST /products/_doc/UqXXRZQBojmWc6Ssvexl/_update
{
  "doc": {
    "title" : "呀土豆"
  }
}

查看一下更新结果,发现只有指定的字段更新

 这种更新方式,不会删除原文档,会根据指定字段更新

批量操作 

批量添加文档

注意:json格式必须写在一行,不然执行出错

# 文档批量操作
POST /products/_doc/_bulk
{"index":{"_id":3}}
{"id":3,"title": "呀土豆3","price": 2.5,"description": "也好吃3"}
{"index":{"_id":4}}
{"id":4,"title": "呀土豆4","price": 2.5,"description": "也好吃4"}
{"index":{"_id":5}}
{"id":5,"title": "呀土豆5","price": 2.5,"description": "也好吃5"}


成功添加多个文档

添加、更新、删除
POST /products/_doc/_bulk
{"index":{"_id":6}}
{"id":6,"title": "炫迈","price": 10.5,"description": "挺好吃"}
{"update":{"_id":4}}
{"doc": {"title": "呀土豆4update"}}
{"delete":{"_id":5}}

执行结果:新增id 6,更新id 4,删除id 5

 注意:批量操作时不会因为一个失败而全部失败,而是继续执行后面的操作,在返回时按照执行的状态返回

5.高级查询 DSL

  • 说明:ES中提供了一种强大的检索数据方式,这种检索方式称之为 Query DSL<DomainQuery DSL是利用 Rest API传递JSON格式的请求体(RequestSpecified Language>,Body)数据与ES进行交互,这种方式的 丰富查询语法 让ES检索变得 更强大,更简洁。
  • 语法:
    # 加_doc时在kibana中没有提示
    # GET /索引名/_doc/_search {json格式请求提数据}
    
    # 不加_doc时在kibana中有提示
    # GET /索引名/_search {json格式请求提数据}
    
    # 两种方式执行结果是一样的

 查询所有[match all]

# 查询所有
GET /products/_search
{
  "query": {
    "match_all": {}
  }
}

 查询结果

{
  "took" : 14,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 6,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "title" : "蘑古力力"
        }
      },
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "UqXXRZQBojmWc6Ssvexl",
        "_score" : 1.0,
        "_source" : {
          "title" : "呀土豆",
          "price" : 2.5,
          "description" : "也好吃"
        }
      },
      {
        "_index" : "products",
        "_type" : &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值