ElasticSearch03-基本操作

ops/2024/12/15 12:53:51/

零、文章目录

ElasticSearch03-基本操作

1、RestFul API 风格

  • ElasticSearch 的接口风格是 RESTful API。RESTful 是一种软件架构风格,它使用 HTTP 协议来实现客户端和服务器之间的通信。
  • ElasticSearch 的 RESTful API 提供了一种简单且标准化的方式来与 ElasticSearch 进行交互,包括索引、查询、分析和管理操作。
  • RESTful API 的特点
    • 统一的接口规范:RESTful API 使用 HTTP 方法(如 GET、POST、PUT、DELETE)来表示对资源的操作。例如,使用 GET 方法可以获取资源,使用 POST 方法可以创建资源,使用 PUT 方法可以更新资源,使用 DELETE 方法可以删除资源。
    • 资源的唯一标识:在 RESTful API 中,每个资源都有一个唯一的 URI(统一资源标识符)。例如,在 ElasticSearch 中,可以通过 /index/type/id 来唯一标识一个文档,其中 index 是索引名称,type 是文档类型,id 是文档的唯一标识符。
    • 无状态性:RESTful API 是无状态的,这意味着每个请求都是独立的,服务器不会保存客户端的状态信息。每次请求都需要包含足够的信息来完成操作。
    • 可缓存性:RESTful API 允许对响应进行缓存,以提高性能和减少服务器负载。例如,对于一些不经常变化的资源,可以将其响应缓存起来,以便后续请求可以直接从缓存中获取数据。
    • 使用标准的媒体类型:RESTful API 使用标准的媒体类型(如 JSON、XML)来表示资源的数据格式。在 ElasticSearch 中,通常使用 JSON 格式来表示数据。

2、索引操作

(1)添加索引-PUT
  • 注意:kibana\postman\head插件选择自己喜欢的一种使用即可。
  • 这里使用kibana的dev tool,因为 kibana里面省略了http://localhost:9200,更加简洁。
# 请求
PUT shopping# 返回
{"acknowledged" : true,"shards_acknowledged" : true,"index" : "shopping"
}
  • 返回值说明
    • acknowledged:这个字段是一个布尔值,表示请求的操作是否被集群接收并且开始执行。如果值为true,表示操作已被确认;如果为false,则表示操作未被确认。
    • shards_acknowledged:这个字段也是一个布尔值,表示操作是否已经被所有相关的分片确认。对于写操作(如索引文档、更新设置等),这个字段表示操作是否已经被所有相关的分片接收并开始执行。如果值为true,表示所有分片都确认了操作;如果为false,则表示至少有一个分片没有确认操作。
    • index:这个字段表示操作被执行的索引名称。在这个例子中,操作是针对名为shopping的索引执行的。
(2)查看所有索引-GET
  • 这里_cat 表示查看的意思,indices 表示索引,所以整体含义就是查看当前 ES服务器中的所有索引
# 请求
GET _cat/indices?v# 返回
health status index                           uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .geoip_databases                NkdVmCBXTMmPpjiSohfXaw   1   0         36            0     34.9mb         34.9mb
green  open   .kibana_7.15.0_001              IXufDJUzQz6mUJWCabgcsA   1   0         23           12      2.3mb          2.3mb
green  open   .apm-custom-link                bdJnnr2IRBeGgAqimdrhQA   1   0          0            0       208b           208b
green  open   .apm-agent-configuration        pYrpjjhHRCGCG0NJPM-aDw   1   0          0            0       208b           208b
green  open   .kibana-event-log-7.15.0-000001 zbb14WTOQHm7e52KlAzCrA   1   0          1            0        6kb            6kb
green  open   .kibana_task_manager_7.15.0_001 YOaqFHuXScCBg3neLKdgcg   1   0         15          390    168.3kb        168.3kb
yellow open   shopping                        P4UQj-moTbudvcG7didlJg   1   1          0            0       208b           208b
  • 返回值表头说明
表头含义
health当前服务器健康状态: green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status索引打开、关闭状态
index索引名
uuid索引统一编号
pri主分片数量
rep副本数量
docs.count可用文档数量
docs.deleted文档删除状态(逻辑删除)
store.size主分片和副分片整体占空间大小
pri.store.size主分片占空间大小
(3)查看单个索引-GET
# 请求
GET shopping# 返回
{"shopping" : {"aliases" : { },"mappings" : { },"settings" : {"index" : {"routing" : {"allocation" : {"include" : {"_tier_preference" : "data_content"}}},"number_of_shards" : "1","provided_name" : "shopping","creation_date" : "1733810897901","number_of_replicas" : "1","uuid" : "P4UQj-moTbudvcG7didlJg","version" : {"created" : "7150099"}}}}
}
  • 返回值说明
    • aliases:这个字段包含了索引的所有别名。在这个例子中,aliases是空的,意味着shopping索引没有设置别名。
    • mappings:这个字段定义了索引中文档的结构,包括字段类型和索引规则。在这个例子中,mappings是空的,可能是因为索引是动态映射的,或者没有指定映射。
    • settings:这个字段包含了索引的配置设置,具体包括:
      • index:这是针对索引的特定设置。
        • routing.allocation.include._tier_preference:这个设置用于控制索引分片的分配。在这里,_tier_preference被设置为data_content,意味着索引的分片会被分配到标记为data_content的节点上。
        • number_of_shards:这个设置定义了索引的主分片数量。在这里,shopping索引被设置为有1个主分片。
        • provided_name:这是用户为索引提供的名称,在这里是shopping
        • creation_date:这是索引创建的时间戳(毫秒)。在这里,索引是在1733810897901毫秒时创建的,你可以将其转换为日期时间格式来理解。
        • number_of_replicas:这个设置定义了索引的副本分片数量。在这里,shopping索引被设置为有1个副本分片。
        • uuid:这是索引的唯一标识符。在这里,索引的UUID是P4UQj-moTbudvcG7didlJg
        • version.created:这个设置显示了创建索引时Elasticsearch集群的版本号。在这里,版本号是7150099
(5)删除索引-DELETE
# 请求
DELETE shopping# 返回
{"acknowledged" : true
}

3、文档操作

(1)创建文档-POST
  • 这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式。
  • 文档发送请求的方式必须为 POST,不能是PUT,否则会发生错误。
# 创建索引
PUT shopping# 请求
POST shopping/_doc
{"title":"小米手机","category":"小米","images":"https://www.mi.com/","price":4999.00
}#返回
{"_index" : "shopping","_type" : "_doc","_id" : "-2VDr5MBnMDr74vGJKfQ","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 0,"_primary_term" : 1
}
  • 返回值说明
    • _index:这个字段表示文档被索引到的索引名称。在这个例子中,文档被索引到了名为shopping的索引。
    • _type:在Elasticsearch 7.x之前的版本中,这个字段表示文档的类型。从7.x版本开始,类型被标记为废弃,并在8.x版本中被完全移除。_doc是7.x版本引入的默认文档类型。
    • _id:这个字段表示被索引文档的唯一标识符。在这个例子中,文档的ID是-2VDr5MBnMDr74vGJKfQ
    • _version:这个字段表示文档的版本号。每次文档被更新时,版本号会增加。在这个例子中,文档的版本是1,意味着这是文档的初始版本。
    • result:这个字段表示操作的结果。在这个例子中,resultcreated,表示文档已经被成功创建。
    • _shards:这个字段包含了关于分片操作的统计信息。
      • total:这个字段表示参与操作的分片总数。在这个例子中,总共有2个分片参与了操作。
      • successful:这个字段表示成功完成操作的分片数量。在这个例子中,有1个分片成功完成了操作。
      • failed:这个字段表示操作失败的分片数量。在这个例子中,没有分片操作失败。
    • _seq_no:这个字段表示文档的序列号。序列号是一个递增的数字,用于标识文档操作的顺序。在这个例子中,序列号是0,表示这是第一个操作。
    • _primary_term:这个字段表示主分片的任期编号。在Elasticsearch的分布式环境中,每个主分片都有一个任期编号,用于确保操作的顺序和一致性。在这个例子中,主分片的任期编号是1。
(2)查看文档-GET
  • 查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询
# 请求
GET shopping/_doc/-2VDr5MBnMDr74vGJKfQ# 返回
{"_index" : "shopping","_type" : "_doc","_id" : "-2VDr5MBnMDr74vGJKfQ","_version" : 1,"_seq_no" : 0,"_primary_term" : 1,"found" : true,"_source" : {"title" : "小米手机","category" : "小米","images" : "https://www.mi.com/","price" : 4999.0}
}
  • 返回值说明
    • _index:这个字段表示文档所在的索引名称。在这个例子中,文档位于名为shopping的索引。
    • _type:在Elasticsearch 7.x之前的版本中,这个字段表示文档的类型。从7.x版本开始,类型被标记为废弃,并在8.x版本中被完全移除。_doc是7.x版本引入的默认文档类型。
    • _id:这个字段表示被检索文档的唯一标识符。在这个例子中,文档的ID是-2VDr5MBnMDr74vGJKfQ
    • _version:这个字段表示文档的版本号。每次文档被更新时,版本号会增加。在这个例子中,文档的版本是1。
    • _seq_no:这个字段表示文档的序列号。序列号是一个递增的数字,用于标识文档操作的顺序。
    • _primary_term:这个字段表示主分片的任期编号。在Elasticsearch的分布式环境中,每个主分片都有一个任期编号,用于确保操作的顺序和一致性。
    • found:这个字段是一个布尔值,表示是否找到了匹配的文档。在这个例子中,foundtrue,表示文档被成功找到。
    • _source:这个字段包含了文档的原始数据,即在索引时提交的源数据。在这个例子中,_source字段包含了以下信息:
      • title:商品的标题,这里是“小米手机”。
      • category:商品的类别,这里是“小米”。
      • images:商品的图片链接,这里是一个URL,但是注意链接字符串中的"是HTML实体字符,代表双引号",所以实际的URL应该是https://www.mi.com/
      • price:商品的价格,这里是4999.0。
(3)修改文档-PUT
  • 输入相同的 URL 地址请求,会覆盖原有数据内容,每次覆盖版本号加1。
# 请求
PUT shopping/_doc/-2VDr5MBnMDr74vGJKfQ
{"title":"华为手机","category":"华为","images":"https://www.huawei.com/","price":4999.00
}# 返回
{"_index" : "shopping","_type" : "_doc","_id" : "-2VDr5MBnMDr74vGJKfQ","_version" : 2,"result" : "updated","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 1,"_primary_term" : 1
}
  • 返回值说明
    • _index:这个字段表示文档所在的索引名称。在这个例子中,文档位于名为shopping的索引。
    • _type:在Elasticsearch 7.x之前的版本中,这个字段表示文档的类型。从7.x版本开始,类型被标记为废弃,并在8.x版本中被完全移除。_doc是7.x版本引入的默认文档类型。
    • _id:这个字段表示被更新文档的唯一标识符。在这个例子中,文档的ID是-2VDr5MBnMDr74vGJKfQ
    • _version:这个字段表示文档的版本号。每次文档被更新时,版本号会增加。在这个例子中,文档的版本是2,意味着这是文档的第二次更新。
    • result:这个字段表示操作的结果。在这个例子中,resultupdated,表示文档已经被成功更新。
    • _shards:这个字段包含了关于分片操作的统计信息。
      • total:这个字段表示参与操作的分片总数。在这个例子中,总共有2个分片参与了操作。
      • successful:这个字段表示成功完成操作的分片数量。在这个例子中,有1个分片成功完成了操作。
      • failed:这个字段表示操作失败的分片数量。在这个例子中,没有分片操作失败。
    • _seq_no:这个字段表示文档的序列号。序列号是一个递增的数字,用于标识文档操作的顺序。在这个例子中,序列号是1,表示这是针对这个文档的第二次操作。
    • _primary_term:这个字段表示主分片的任期编号。在Elasticsearch的分布式环境中,每个主分片都有一个任期编号,用于确保操作的顺序和一致性。在这个例子中,主分片的任期编号是1。
(4)删除文档-DELETE
  • 删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。版本号会加1。
# 请求
DELETE shopping/_doc/-2VDr5MBnMDr74vGJKfQ# 返回
{"_index" : "shopping","_type" : "_doc","_id" : "-2VDr5MBnMDr74vGJKfQ","_version" : 3,"result" : "deleted","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 2,"_primary_term" : 1
}

4、映射操作

(1)创建映射-PUT
  • 映射:类似于数据库(database)中的表结构(table)。创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个索引下有哪些字段,每个字段有哪些约束信息。
  • 动态映射:索引没有创建映射,添加数据的时候会根据插入的数据自动创建映射。
# 创建索引
PUT studuent# 创建映射
PUT studuent/_mapping
{"properties": {"name":{"type": "text","index": true},"sex":{"type": "keyword","index": true},"age":{"type": "keyword","index": false}}
}# 返回
{"acknowledged" : true
}
(2)映射字段说明
  • 字段名:随意按需求
  • index:是否索引,默认为 true,也就是说你不进行任何配置,所有字段都会被索引。
    • true:字段会被索引,则可以用来进行搜索
    • false:字段不会被索引,不能用来搜索
  • store:是否将数据进行独立存储,默认为 false
    • false: 文本存储在 _source 里面
    • true: 独立的存储某个字段,获取独立存储的字段要比从 _source 中解析快得多,但是也会占用更多空间,所以要根据实际业务需求来设置。
  • analyzer:分词器,ik_max_word 即使用 ik 分词器
  • type:字段数据类型,Elasticsearch 中支持的数据类型非常丰富
    • text
      • 用于全文搜索的字段类型。
      • 会自动进行分词(tokenization),将文本分割成单词或短语。
      • 适合用于需要全文搜索的场景,如文章内容、产品描述等。
    • keyword
      • 用于精确匹配的字段类型,不会被分词。
      • 适合用于需要精确值匹配的场景,如标签、状态、性别、ID等。
      • 通常与text类型配合使用,keyword类型用于过滤、排序和聚合,而text类型用于全文搜索。
    • integer
      • 用于存储整数值。
      • 适合用于需要进行数值计算或范围查询的场景,如年龄、评分、库存数量等。
    • short
      • 用于存储短整数值。
      • integer类似,但范围更小,适合存储较小的整数值。
    • long
      • 用于存储长整数值。
      • integer类似,但范围更大,适合存储较大的整数值。
    • byte
      • 用于存储字节值。
      • 适合存储小范围内的数值,如小的计数器。
    • double
      • 用于存储双精度浮点数值。
      • 适合存储需要高精度的小数,如价格、重量等。
    • float
      • 用于存储单精度浮点数值。
      • double类似,但精度较低,适合存储不需要高精度的小数。
    • half_float
      • 用于存储半精度浮点数值。
      • 精度介于floatdouble之间。
    • scaled_float
      • 用于存储缩放的浮点数值。
      • 允许存储一个浮点数乘以一个因子,以节省空间并提高性能。
    • date
      • 用于存储日期和时间。
      • 支持多种日期格式,适合存储日志时间戳、出生日期等。
    • boolean
      • 用于存储布尔值。
      • 只有truefalse两个值,适合存储开关状态、是否标志等。
    • binary
      • 用于存储二进制数据。
      • 适合存储文件、图片等二进制内容。
    • nested
      • 用于存储嵌套对象。
      • 允许在单个字段中存储多个文档,适合存储数组或对象中的复杂结构。
    • object(在Elasticsearch 6.x及更早版本中使用object):
      • 用于存储复杂对象。
      • 允许在单个字段中存储多个字段,类似于JSON对象。
    • ip
      • 用于存储IP地址。
      • 适合存储IP地址信息,支持IP地址的过滤和聚合。
(3)查看映射-GET
# 请求 查看单个索引
GET studuent/_mapping# 返回
{"studuent" : {"mappings" : {"properties" : {"age" : {"type" : "keyword","index" : false},"name" : {"type" : "text"},"sex" : {"type" : "keyword"}}}}
}
(4)修改映射-PUT
  • 索引中添加一个名为hobby的新字段,类型为文本。
PUT /studuent/_mapping
{"properties": {"hobby": {"type": "text"}}
}# 返回
{"acknowledged" : true
}# 再次查看
GET studuent/_mapping# 返回
{"studuent" : {"mappings" : {"properties" : {"age" : {"type" : "keyword","index" : false},"hobby" : {"type" : "text"},"name" : {"type" : "text"},"sex" : {"type" : "keyword"}}}}
}
(5)删除映射-DELETE
  • 在ES中,一旦创建了映射,你不能直接删除映射中的字段。
  • 映射的删除通常意味着删除整个索引。删除索引将连带删除所有映射。
# 请求
DELETE studuent# 返回
{"acknowledged" : true
}

http://www.ppmy.cn/ops/142105.html

相关文章

大屏开源项目go-view二次开发2----半环形控件(C#)

环境搭建参考: 大屏开源项目go-view二次开发1----环境搭建(C#)-CSDN博客 要做的半环形控件最终效果如下图: 步骤如下: 1 在go-view前端项目的\src\packages\components\Charts目录下新增Others目录,并在Others目录下新增PieExt…

孚盟云 MailAjax.ashx SQL注入漏洞复现

0x01 产品简介 上海孚盟软件有限公司是一家外贸SaaS服务提供商,也是专业的外贸行业解决方案专业提供商。 全新的孚盟云产品,让用户可以用云模式实现信息化管理,让用户的异地办公更加流畅,大大降低中小企业在信息化上成本,用最小的投入享受大型企业级别的信息化服务,主要…

特工找密码(蓝桥杯)

本来这题想用枚举暴力解的,但是运行总是超时,数值范围太大了~,所以该题不能用枚举进行暴力。 转换成二进制,我们判断一下其规律 注意:按位与是都为1时其值才为1,所以当x和y按位与的结果为2时,其…

C语言——判断输入字符串是否合法代码分享

一. 引言 成功的程序总是尝试预测无效数据,并将此类数据隔离,使其不被接受和处理 首先验证数据的类型是否正确;如果没有,请要求用户重新输入数据 解释为什么输入的数据无效 验证输入数据的最常用方法之一…

深入详解机器学习基础中的模型评估方法

引言 机器学习正在快速改变我们的世界,从自动驾驶汽车到个性化推荐系统,其应用无处不在。然而,一个成功的机器学习项目不仅依赖于强大的算法和丰富的数据,还需要精确的模型评估方法。模型评估是机器学习过程中不可或缺的环节&…

HUGGINFACE NLP-dataset

1 What if my dataset isn’t on the Hub? 1.1 Working with local and remote datasets 1.1.1 supports several common data formats, CSV & TSV csv load_dataset("csv", data_files"my_file.csv") Text files text load_dataset("text&quo…

微信小程序中 Echarts 的巧妙运用

一、引入 Echarts 的准备工作 在微信小程序中引入 Echarts 需要进行一系列的准备工作。首先,我们可以从 echarts 官网或 GitHub 上下载 echarts-for-weixin 项目。找到其中的 ec-canvas 文件夹,这个文件夹将是我们引入到微信小程序项目中的关键部分。 …

鼠标断断续续的一直转圈咋办

这两天碰到一个事情,鼠标持续的转圈, 敲代码打字啥的,一会儿又失去下焦点,如此反复,搞得心态爆炸。 实在进行不下去了,网上百度了一堆,有说设置鼠标的,有说清理开机启动的&#xff0…