Spoon | blog Spoon | blog

"大胆点生活,你没有那么多观众"

目录
ElasticSearch入门
/  

ElasticSearch入门

什么是ElasticSearch

ES 是一个开源的高扩展的分布式全文搜索引擎,Elasticsearch 是面向文档型数据库

ElasticSearch 目录

9200 端口为浏览器访问的http。9300 端口为Elasticsearch 集群间组件的通信端口,

| bin | 可执行脚本目录 |
| -: | :- |
| config | 可配置目录 |
| jdk | 内置JDK目录 |
| lib | 类库 |
| logs | 日志目录 |
| modules | 模块目录 |
| piugins | 插件目录 |

核心概念

索引 Index

一个索引就是一个拥有几分相似特征的文档的集合,(索引有一个名字表示必须是小写字母)

映射 Mapping

映射是定义一个文档和它所包含的字段如何被存储和索引的过程。默认配置下,ES可以根据插入的数据自动地创建mapping,也可以手动建立mapping。mapping中主要包括字段名、字段类型等。

文档 Document

文档是索引中存储的一条条数据。一条文档是一个可被索引的最小单元。ES中文档采用JSON格式表示。

操作

索引基本操作

创建索引

es 的操作时在浏览器完成的通过发送请求的方式完成创建,因为put请求时等幂的所以在创建索引时通过put请求 以防止重复多个相同名称索引

例如请求

put : http://127.0.0.1:9200/shopping

# 返回的结果为
{
 "acknowledged": true,  【响应结果】
 "shards_acknowledged": true, 【分片结果】
 "index": "shopping" 【索引名称】
}
# 注意:创建索引库的分片数默认1 片,在7.0.0 之前的Elasticsearch 版本中,默认5 片

查看全部索引

通过发送GET请求查看全索引信息

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

image20211209162110276.png

这里请求路径中的**_cat 表示查看的意思**,**indices 表示索引,**所以整体含义就是查看当前ES服务器中的所有索引,就好像MySQL 中的show tables 的感觉.

| 表头 | 含义 |
| -: | :- |
| health | 当前服务器健康状态: green(集群完整) yellow(单点正常、集群不完整) red(单点不正常) |
| status | 索引打开、关闭状态 |
| index | 索引名称 |
| uuid | 索引统一编号 |
| pri | 主分片数量 |
| rep | 副本数量 |
| docs.count | 可用文档数量 |
| docs.deleted | 文档删除状态(逻辑删除) |
| store.size | 主分片和副分片整体占空间大小 |
| pir.store.size | 主分片占空间大小 |

查看单个索引

GET 请求  :http://127.0.0.1:9200/shopping 

# 返回结果如下
{ 
 "shopping"【索引名】: {   
     "aliases"【别名】: {}, 
     "mappings"【映射】: {}, 
     "settings"【设置】: { 
         "index"【设置 - 索引】: { 
             "creation_date"【设置 - 索引 - 创建时间】: "1614265373911", 
             "number_of_shards"【设置 - 索引 - 主分片数量】: "1", 
             "number_of_replicas"【设置 - 索引 - 副分片数量】: "1", 
             "uuid"【设置 - 索引 - 唯一标识】: "eI5wemRERTumxGCc1bAk2A", 
             "version"【设置 - 索引 - 版本】: { 
                 "created": "7080099" 
             }, 
             "provided_name"【设置 - 索引 - 名称】: "shopping" 
         } 
     } 
 } 
} 

删除索引

DELETE 请求  :http://127.0.0.1:9200/shopping 

文档基本操作

创建文档

POST 请求  :http://127.0.0.1:9200/shopping/_doc
# 请求体加入
{ 
 "title":"小米手机", 
 "category":"小米", 
 "images":"http://www.gulixueyuan.com/xm.jpg", 
 "price":3999.00 
}

返回信息解读

{ 
 "_index"【索引】: "shopping", 
 "_type"【类型-文档】: "_doc", 
 "_id"【唯一标识】: "Xhsa2ncBlvF_7lxyCE9G", #可以类比为MySQL 中的主键,随机生成 
 "_version"【版本】: 1, 
 "result"【结果】: "created", #这里的create 表示创建成功 
 "_shards"【分片】: { 
     "total"【分片  -  总数】: 2, 
     "successful"【分片  -  成功】: 1, 
     "failed"【分片  -  失败】: 0 
 }, 
 "_seq_no": 0, 
 "_primary_term": 1 
}

可以使用如下方法生成指定的id便于后期查询

post : http://127.0.0.1:9200/shopping/_doc/1

查看文档

GET 请求  :http://127.0.0.1:9200/shopping/_doc/1 
shpping是索引名,doc类型/ id

修改文档

POST 请求  :http://127.0.0.1:9200/shopping/_doc/1

携带请求体
{ 
 "title":"华为手机", 
 "category":"华为", 
 "images":"http://www.gulixueyuan.com/hw.jpg", 
 "price":4999.00 
}

修改某一条局部信息

发送以下请求方式:
POST 请求 ,http://127.0.0.1:9200/shopping/_delete_by_query

携带请求体
{ 
"query":{ 
 "match":{ 
   "price":4000.00 
 } 
} 

删除数据

DELETE 请求  :http://127.0.0.1:9200/shopping/_doc/1

条件删除文档

发送以下请求方式:
POST 请求 ,http://127.0.0.1:9200/shopping/_delete_by_query

携带请求体
{ 
"query":{ 
 "match":{ 
   "price":4000.00 
 } 
} 

映射操作

es对应数据库内的数据操作 需要如同JDBC一样对数据库字段进行映射

创建索引

put 请求:http://127.0.0.1:9200/student/_mapping 
{ 
"properties": { 
 "name":{ 
   "type": "text", 
   "index": true 
 }, 
 "sex":{ 
   "type": "text", 
   "index": false 
 }, 
 "age":{ 
   "type": "long", 
   "index": false 
 } 
} 

字段说明

  • 字段名:任意填写,下面指定许多属性,例如:title、subtitle、images、price
  • type:类型,Elasticsearch 中支持的数据类型非常丰富,说几个关键的:
    • String 类型,又分两种:
      • text:可分词 即es会对存储文件信息进行分词 提供模糊查询
      • keyword:不可分词,数据会作为完整字段进行匹配
    • Numerical:数值类型,分两类
      • 基本数据类型:long、integer、short、byte、double、float、half_float
      • 浮点数的高精度类型:scaled_float
    • Date:日期类型
    • Array:数组类型
    • Object:对象
  • index:是否索引,默认为true,也就是说你不进行任何配置,所有字段都会被索引。
    • true:字段会被索引,则可以用来进行搜索
    • false:字段不会被索引,不能用来搜索
  • store:是否将数据进行独立存储,默认为false
    • 原始的文本会存储在source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置"store": true 即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置。
  • analyzer:分词器,这里的ik_max_word 即使用ik 分词器

查看索引

GET 请求 :http://127.0.0.1:9200/student/_mapping

高级查询

查询条件

ES的查询时通过请求体携带不同的字段进行完成的

"query":这里的query 代表一个查询对象,里面可以有不同的查询属性

"match_all":查询类型,例如:match_all(代表查询所有), match,term , range 等等

*match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是or 的关系*

multi_match 与match 类似,不同的是它可以在多个字段中查询

`term `查询,精确的关键词匹配查询,不对查询条件进行分词 功能和 keyword 类似

`terms  `查询和  `term`  查询一样,但它允许你指定多值进行匹配。


{查询条件}:查询条件会根据类型的不同,写法也有差异

GET 请求 :http://127.0.0.1/student/_search
{ 
"query": { 
# 不同的查询属性
 "terms": { 
   "name": ["zhangsan","lisi"] 
 } 
} 
}

还有许多查询条件,不做具体表示,可以查看官方文档https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html


标题:ElasticSearch入门
作者:三季人
地址:https://sanjiren123.ltd/articles/2021/12/18/1639787194292.html
如有错误还请告知Email:san_ji_ren@163.com