IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Elasticsearch笔记 -> 正文阅读

[大数据]Elasticsearch笔记

1.Elasticsearch 是什么

????????Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。Elaticsearch,简称为 ESES 是一个开源的高扩展的分布式全文搜索引擎,是整个ElasticStack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。

2.Lucene、Elasticsearch、Solr 是什么 ????

????????Lucene 是 Apache 软件基金会 Jakarta 项目组的一个子项目,提供了一个简单却强大的应用
程式接口,能够做全文索引和搜寻。在 Java 开发环 境里 Lucene 是一个成熟的免费开源 工具。就
其本身而言, Lucene 是当前以及最近几年最受欢迎的免费 Java 信息检索程序库。 Lucene
是一个 提供全文搜索功能类库的核心工具包,而真正使用它还需要一个完善的 服务框架搭建起来
进行应用。
???????
????????目前市面上流行的搜索引擎软件,主流的就两款:Elasticsearch Solr , 这两款都是基
Lucene 搭建的,可以独立部署启动的搜索引擎服 务软件。由于内核相同,所以两者除了 服务器安
装、部署、管理、集群以外,对于数据的操作 修改、添加、保存、查询等等都十 分类似。 在使用
过程 中,一般都会将 Elasticsearch Solr 这两个软件对比,然后进行选型。这两 个搜索引擎都是
流行的,先进的的开源搜索引擎。它们都是围绕核心底 层搜索库 - Lucene 构建的 - 但它们又是不
同的。像所有东西一样,每个都有其优点和缺点:

?2.Elasticsearch 入门

2.1 Elasticsearch 安装

2.1.1 下载软件

Elasticsearch 的官方地址: https://www.elastic.co/cn/?
Elasticsearch 最新的版本是 7.11.2 (截止 2021.3.10 ),我们选择 7.8.0 版本(最新版本半年前的
版本)

?????????Elasticsearch 分为 Linux Windows 版本,根据自己需要选择,公司用的一般都是linux版

2.1.2 安装软件

Windows 版的 Elasticsearch 的安装很简单,解压即安装完毕,解压后的 Elasticsearch 的目录结
构如下:

??????

???解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务

注意:?
???????
???????? 9300 端口为 Elasticsearch 集群间组件的通信端口, 9200 端口为浏览器访问的 http 协议
RESTful 端口。
打开浏览器(推荐使用谷歌浏览器),输入地址: http://localhost:9200 ,测试结果

?2.1.3 问题解决

  1. Elasticsearch 是使用 java 开发的,且 7.8 版本的 ES 需要 JDK 版本 1.8 以上,默认安装包带有 jdk 环境,如果系统配置 JAVA_HOME ,那么使 用系统默认的 JDK ,如果没有配 置使用自带的 JDK ,一般建议使用系统配置的 JDK
  2. 双击启动窗口闪退,通过路径访问追踪错误,如果是“空间不足”,请修改
    config/jvm.options 配置文件

2.2 Elasticsearch 基本操作

2.2.1 RESTful

????????REST 指的是一组架构约束条件原则。满足这些约束条件和原则的应用程序或设计就
RESTful Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之 间是无状
的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务 器在请求之间的
任何 时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用 服务器回答,这十分
适合云计算之类的环境。客户端可以缓存数据以改进性 能。
????????在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它 向客
户端公开。资源的例子有:应用程序对象、数据库 记录、算法等等。每个资源都使用 URI
(Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客
端和服务器 之间传输状态。使用的是标准的 HTTP 方法,比如 GET PUT POST DELETE
????????在 REST 样式的 Web 服务中,每个资源都有一个地址。资源本身都是方法调用的目 标,方法
列表对所有资源都是一样的。这些方法都是标准方法,包括 HTTP GET POST PUT
DELETE ,还可能包括 HEAD OPTIONS 简单的理解就是,如果想要访问互联 网上的资源,
就必须向资 源所在的服务器发出请求,请求体中必须包含资源的网络路径,以及对资源进行的操作
(增删改查)

2.2.2 客户端安装

????????如果直接通过浏览器向 Elasticsearch 服务器发请求,那么需要在发送的请求中包含 HTTP
准的方法,而 HTTP 的大部分特性且仅支持 GET和 POST 方法。所以为了能方便 地进行客户端的
访问,可以使用 Postman 软件。
????????Postman 是一款强大的网页调试工具,提供功能强大的 Web API HTTP 请求调试。 软件
功能强大,界面简洁明晰、操作方便快捷,设计得很 人性化。 Postman 中文版能够发送 任何类型
HTTP 请求 (GET, HEAD, POST, PUT..) ,不仅能够表单提交,且可以附带任意 类型请求体。
????????Postman 官网: Postman
???????? Postman 下载: https://www.getpostman.com/apps?

?2.2.3 数据格式

????????Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,
们将 Elasticsearch 里存储文档数据和关系型数据库MySQL 存储数据的概念进行一个类比

????????ES 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。 这里
Types 的概念已经被逐渐弱化, Elasticsearch 6.X中,一个 index 下已经只能包含一个 type
Elasticsearch 7.X , Type 的概念已经被删除了。
6 JSON 作为文档序列化的格式,比如一条用户信息:

2.2.4 HTTP 操作

2.2.4.1 索引操作
1) 创建索引
对比关系型数据库,创建索引就等同于创建数据库
Postman 中,向 ES 服务器发 PUT 请求 : http://127.0.0.1:9200/shopping

请求后,服务器返回响应 ?

?

{
 "acknowledged"【响应结果】: true, # true 操作成功
 "shards_acknowledged"【分片结果】: true, # 分片操作成功
 "index"【索引名称】: "shopping"
}
# 注意:创建索引库的分片数默认 1 片,在 7.0.0 之前的 Elasticsearch 版本中,默认 5 片
如果重复添加索引,会返回错误信息

?2) 查看所有索引

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

?

?3) 查看单个索引

Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/shopping

查看索引向 ES 服务器发送的请求路径和创建索引是一致的。但是 HTTP 方法不一致。这里
可以体会一下 RESTful 的意义,

?

请求后,服务器响应结果如下:

?

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

?

4) 删除索引
Postman 中,向 ES 服务器发 DELETE 请求 : http://127.0.0.1:9200/shopping

?重新访问索引时,服务器返回响应:索引不存在

?

2.2.4.2 文档操作

1) 创建文档

索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数据库中
的表数据,添加的数据格式为 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

?

?

?此处需要注意:如果增加数据时明确数据主键,那么请求方式也可以为 PUT

2) 查看文档
查看文档时,需要指明文档的唯一性标识,类似于 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
}
}

?

3) 修改文档

和新增文档一样,输入相同的 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
}

?

4) 修改字段?

修改数据时,也可以只修改某一给条数据的局部信息
Postman 中,向 ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping/ _update/1
请求体内容为:
{
"doc": {
"price":3000.00
}
}

?修改成功后,服务器响应结果:

?根据唯一性标识,查询文档数据,文档数据已经更新

?

5) 删除文档

删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。
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
}

?删除后再查询当前文档信息

?如果删除一个并不存在的文档

?

{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_version": 1,
"result" 【结果】 : "not_found", # not_found 表示未查找到
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 2
}

?6) 条件删除文档

一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数
据进行删除
首先分别增加多条数据 :
{
"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": []
}

?

?2.2.4.3 映射操作

有了索引库,等于有了数据库中的 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
}
}
}

?服务器响应结果如下:

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:20:17  更:2021-12-06 15:21:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:31:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码