Skip to content

Commit 1015183

Browse files
committed
新增笔记:Elasticsearch核心概念
1 parent 28182d9 commit 1015183

File tree

3 files changed

+116
-0
lines changed

3 files changed

+116
-0
lines changed
Loading
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Elasticsearch
2+
3+
[Elasticsearch核心概念](./subfile/_1Elasticsearch核心概念.md)
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# Elasticsearch核心概念
2+
3+
> 参考文章:[ES详解 - 认知:ElasticSearch基础概念 | Java 全栈知识体系](https://pdai.tech/md/db/nosql-es/elasticsearch-x-introduce-1.html#google_vignette)
4+
5+
## 一. 为什么需要学习ElasticSearch
6+
7+
> 根据[DB Engine的排名在新窗口打开](https://db-engines.com/en/ranking)显示,ElasticSearch是最受欢迎的企业级搜索引擎。
8+
9+
![](../images/1.png)
10+
11+
下图红色勾选的是我们前面的系列详解的,除此之外你可以看到搜索库ElasticSearch在前十名内:
12+
13+
所以为什么要学习ElasticSearch呢?
14+
15+
1. 在当前软件行业中,搜索是一个软件系统或平台的基本功能,学习ElasticSearch就可以为相应的软件打造出良好的搜索体验。
16+
17+
2. 其次,ElasticSearch具备非常强的大数据分析能力。虽然Hadoop也可以做大数据分析,但是ElasticSearch的分析能力非常高,具备Hadoop不具备的能力。比如有时候用Hadoop分析一个结果,可能等待的时间比较长。
18+
19+
3. ElasticSearch可以很方便的进行使用,可以将其安装在个人的笔记本电脑,也可以在生产环境中,将其进行水平扩展。
20+
21+
4. 国内比较大的互联网公司都在使用,比如小米、滴滴、携程等公司。另外,在腾讯云、阿里云的云平台上,也都有相应的ElasticSearch云产品可以使用。
22+
23+
5. 在当今大数据时代,掌握近实时的搜索和分析能力,才能掌握核心竞争力,洞见未来。
24+
25+
## 二. 什么是ElasticSearch
26+
27+
> ElasticSearch是一款非常强大的、基于Lucene的开源搜索及分析引擎;它是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。
28+
29+
它被用作**全文检索****结构化搜索****分析**以及这三个功能的组合:
30+
31+
- *Wikipedia* 使用 Elasticsearch 提供带有高亮片段的全文搜索,还有 search-as-you-type 和 did-you-mean 的建议。
32+
- *卫报* 使用 Elasticsearch 将网络社交数据结合到访客日志中,为它的编辑们提供公众对于新文章的实时反馈。
33+
- *Stack Overflow* 将地理位置查询融入全文检索中去,并且使用 more-like-this 接口去查找相关的问题和回答。
34+
- *GitHub* 使用 Elasticsearch 对1300亿行代码进行查询。
35+
- ...
36+
37+
除了搜索,结合Kibana、Logstash、Beats开源产品,Elastic Stack(简称ELK)还被广泛运用在大数据近实时分析领域,包括:**日志分析****指标监控****信息安全**等。它可以帮助你**探索海量结构化、非结构化数据,按需创建可视化报表,对监控数据设置报警阈值,通过使用机器学习,自动识别异常状况**
38+
39+
ElasticSearch是基于Restful WebApi,使用Java语言开发的搜索引擎库类,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。其客户端在Java、C#、PHP、Python等许多语言中都是可用的。
40+
41+
## 三. ElasticSearch的由来
42+
43+
> ElasticSearch背后的小故事
44+
45+
许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。
46+
47+
直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。 他发布了他的第一个开源项目 Compass。
48+
49+
后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。
50+
51+
第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors(目前736名 contributors )。 一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。
52+
53+
据说,Shay 的妻子还在等着她的食谱搜索引擎…
54+
55+
## 四. 为什么不是直接使用Lucene
56+
57+
> ElasticSearch是基于Lucene的,那么为什么不是直接使用Lucene呢?
58+
59+
Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库。
60+
61+
但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常复杂。
62+
63+
Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单,**通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API**
64+
65+
然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:
66+
67+
- 一个分布式的实时文档存储,每个字段可以被索引与搜索
68+
- 一个分布式实时分析搜索引擎
69+
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
70+
71+
## 五. ElasticSearch的主要功能及应用场景
72+
73+
> 我们在哪些场景下可以使用ES呢?
74+
75+
- 主要功能:
76+
77+
1)海量数据的分布式存储以及集群管理,达到了服务与数据的高可用以及水平扩展;
78+
79+
2)近实时搜索,性能卓越。对结构化、全文、地理位置等类型数据的处理;
80+
81+
3)海量数据的近实时分析(聚合功能)
82+
83+
- 应用场景:
84+
85+
1)网站搜索、垂直搜索、代码搜索;
86+
87+
2)日志管理与分析、安全指标监控、应用性能监控、Web抓取舆情分析;
88+
89+
## 六. ElasticSearch的基础概念
90+
91+
- **Near Realtime(NRT)** 近实时。数据提交索引后,立马就可以搜索到。
92+
- **Cluster 集群**,一个集群由一个唯一的名字标识,默认为“elasticsearch”。集群名称非常重要,具有相同集群名的节点才会组成一个集群。集群名称可以在配置文件中指定。
93+
- **Node 节点**:存储集群的数据,参与集群的索引和搜索功能。像集群有名字,节点也有自己的名称,默认在启动时会以一个随机的UUID的前七个字符作为节点的名字,你可以为其指定任意的名字。通过集群名在网络中发现同伴组成集群。一个节点也可是集群。
94+
- **Index 索引**: 一个索引是一个文档的集合(等同于solr中的集合)。每个索引有唯一的名字,通过这个名字来操作它。一个集群中可以有任意多个索引。
95+
- **Type 类型**:指在一个索引中,可以索引不同类型的文档(6.x版本之前 index类似关系型数据库database的概念,type类似表概念),如用户数据、博客数据。从6.0.0 版本起已废弃,一个索引中只存放一类数据。
96+
- **Document 文档**:被索引的一条数据,索引的基本信息单元,以JSON格式来表示。
97+
- **Shard 分片**:在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上。
98+
- **Replication 备份**: 一个分片可以有多个备份(副本)
99+
100+
为了方便理解,作一个ES和数据库的对比:
101+
102+
| RDBMS | Elasticsearch |
103+
| --------------------- | ------------------------- |
104+
| 数据库 (database) | - |
105+
| 表 (table) | 索引 (index) |
106+
| 行 (row) | 文档 (document) |
107+
| 列 (column) | 字段 (field) |
108+
| 表结构 (schema) | 映射 (mapping) |
109+
| 索引 | 反向索引 (inverted index) |
110+
| SQL | 查询 DSL (Query DSL) |
111+
| `SELECT * FROM table` | `GET http://...` |
112+
| `UPDATE table SET` | `PUT http://...` |
113+
| `DELETE` | `DELETE http://...` |

0 commit comments

Comments
 (0)