ES-2-基本操作

Elasticsearch 基本操作
     REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就
RESTful Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之
间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务
器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用
服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。
      在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它
向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI
(Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客
户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET PUT POST
DELETE
数据格式
    Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,
我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比

     ES 里的 Index 可以看做一个库,而 Types 相当于表,Documents 则相当于表的行。 这里 Types 的概念已经被逐渐弱化,Elasticsearch 6.X 中,一个 index 下已经只能包含一个 type,Elasticsearch 7.X , Type 的概念已经被删除了。

    用 JSON 作为文档序列化的格式,比如一条用户信息:

{
 "name" : "John",
 "sex" : "Male",
 "age" : 25,
 "birthDate": "1990/05/01",
 "about" : "I love to go rock climbing",
 "interests": [ "sports", "music" ]
}

   HTTP 操作

索引操作-创建索引
对比关系型数据库,创建索引就等同于创建数据库
Postman 中,向 ES 服务器发 PUT 请求 : http://127.0.0.1:9200/xxx
{
 "acknowledged"【响应结果】: true, # true 操作成功
 "shards_acknowledged"【分片结果】: true, # 分片操作成功
 "index"【索引名称】: "shopping"
}
# 注意:创建索引库的分片数默认 1 片,在 7.0.0 之前的 Elasticsearch 版本中,默认 5 片
如果重复添加索引,会返回错误信息
查看所有索引

 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/_cat/indices?v

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

 

 查看单个索引 :

Postman 中,向 ES 服务器发 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"
 }
 }
 } }
删除索引
Postman 中,向 ES 服务器发 DELETE 请求 : http://127.0.0.1:9200/shopping
文档操作
创建文档
索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数
据库中的表数据,添加的数据格式为 JSON 格式
Postman 中,向 ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping /_doc
请求体内容为
{
 "title":"小米手机",
 "category":"小米",
 "images":"http://www.gulixueyuan.com/xm.jpg",
 "price":3999.00
}

此处发送请求的方式必须为 POST,不能是 PUT,否则会发生错误

服务器响应结果如下:
{
 "_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 ),默认情况下, ES 服务器会随机
生成一个。
如果想要自定义唯一性标识,需要在创建时指定: http://127.0.0.1:9200/shopping/_doc/ 1
查看文档
查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询
Postman 中,向 ES 服务器发 GET 请求 : http://127.0.0.1:9200/shopping /_doc/1
{
 "_index"【索引】: "shopping",
 "_type"【文档类型】: "_doc",
 "_id": "1",
 "_version": 2,
 "_seq_no": 2,
 "_primary_term": 2,
 "found"【查询结果】: true, # true 表示查找到,false 表示未查找到
 "_source"【文档源信息】: {
 "title": "华为手机",
 "category": "华为",
 "images": "http://www.gulixueyuan.com/hw.jpg",
 "price": 4999.00
 } }

 修改文档

和新增文档一样,输入相同的 URL 地址请求,如果请求体变化,会将原有的数据内容覆盖
Postman 中,向 ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping /_doc/1
请求体内容为 :
{
 "title":"华为手机",
 "category":"华为",
 "images":"http://www.gulixueyuan.com/hw.jpg",
 "price":4999.00
}
修改成功后,服务器响应结果:
{
 "_index": "shopping",
 "_type": "_doc",
 "_id": "1",
 "_version"【版本】: 2,
 "result"【结果】: "updated", # updated 表示数据被更新
 "_shards": {
 "total": 2,
 "successful": 1,
 "failed": 0
 },
 "_seq_no": 2,
 "_primary_term": 2
}
修改字段
修改数据时,也可以只修改某一给条数据的局部信息
Postman 中,向 ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping/ _update/1
请求体内容为
{ 
 "doc": {
 "price":3000.00
 } 
}
删除文档
删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。
Postman 中,向 ES 服务器发 DELETE 请求 : http://127.0.0.1:9200/shopping /_doc/1
删除成功,服务器响应结果:
{
 "_index": "shopping",
 "_type": "_doc",
 "_id": "1",
 "_version"【版本】: 4, #对数据的操作,都会更新版本
 "result"【结果】: "deleted", # deleted 表示数据被标记为删除
 "_shards": {
 "total": 2,
 "successful": 1,
 "failed": 0
 },
 "_seq_no": 4,
 "_primary_term": 2
}
条件删除文档
一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数
据进行删除
首先分别增加多条数据
{
 "title":"小米手机",
 "category":"小米",
 "images":"http://www.gulixueyuan.com/xm.jpg",
 "price":4000.00
}{
 "title":"华为手机",
 "category":"华为",
 "images":"http://www.gulixueyuan.com/hw.jpg",
 "price":4000.00
}
ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping /_delete_by_query
请求体内容为:
{
 "query":{
 "match":{
 "price":4000.00
 }
 } }
删除成功后,服务器响应结果
{
 "took"【耗时】: 175,
 "timed_out"【是否超时】: false,
 "total"【总数】: 2,
 "deleted"【删除数量】: 2,
 "batches": 1,
 "version_conflicts": 0,
 "noops": 0,
 "retries": {
 "bulk": 0,
 "search": 0
 },
 "throttled_millis": 0,
 "requests_per_second": -1.0,
 "throttled_until_millis": 0,
 "failures": []
}
映射操作
有了索引库,等于有了数据库中的 database
接下来就需要建索引库 (index) 中的映射了,类似于数据库 (database) 中的表结构 (table)
创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型
下有哪些字段,每个字段有哪些约束信息,这就叫做映射 (mapping)
1) 创建映射
Postman 中,向 ES 服务器发 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 :可分词
          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 :分词器
查看映射
Postman 中,向 ES 服务器发 GET 请求 : http://127.0.0.1:9200/student /_mapping
索引映射关联
Postman 中,向 ES 服务器发 PUT 请求 : http://127.0.0.1:9200/student1
{
 "settings": {},
 "mappings": {
 "properties": {
"name":{
 "type": "text",
 "index": true
 
},
"sex":{
 "type": "text",
 "index": false
},
"age":{
 "type": "long",
 "index": false
}
 }
 } }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值