课程的大作业要求搭建数据中台,并用到ES技术。因此,我学习了一下它的基本概念和指令,把我的笔记分享给大家。
参考自:
- 官方教程 《Getting started with ElasticSearch》
- Youtobe 视频教程 Elasticsearch Tutorial for Beginners
更新日志:
- (+) 1.1 中 Dynamic Mapping 的说明。2020-12-23
Elasticsearch(简称ES) 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件
一、Elasticsearch的基本概念
1. 特点
Elasticsearch
是一个分布式的存储文件的仓库,它区别于传统的按行存储数据的方式,而是将复杂的数据序列化为 JSON
格式进行存储。而且每个结点都可以 几乎实时地 访问到所有的文件。比 Hadoop, spark, flink 都要快得多
它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。使用这种检索方式的软件或者产品称之为 全文搜索引擎。常用于聚合 (aggregate) 日志
2. 术语
主要涉及到了分布式处理中的术语
-
cluster (集群)
是指一组松散连接的计算机执行相同的任务,并由软件进行统一控制域调度。其中,每个用作服务器的计算机都运行自己的操作系统实例,被称为节点。在大多数情况下,所有节点都使用相同的硬件
还有这一技术包含的基本概念
-
field
字段,数据对象的属性
-
document
文件 (document) 就是你要查找的东西,可以是字符串,一般是 JSON 格式。每个文件都有一个唯一的 ID 以及一个 type。例如日志类型,百科全书类型
-
type
每个 type 定义了部分 documents 共有的语义和映射规则,来代表同一种文件
-
index
它是被搜索的实体 (entity),是 type 的集合(从而也有了 type 是属于该集合的所有文件)。由此,ES 才能对类型在该集合中的文件进行搜索。
类比到传统的数据库中,index 就是一个数据库,type 是一张表,document 就是一行数据
-
inverted index
其实 index 就是 inverted index。现在来看一下它是怎么生成的
假定有两个文件:
前面提到了,文件可以是字符串的形式,现在需要把它们存储到 ES 中。
主要思想是对其进行分词并预处理,得到的每个 token 作为 key,文件信息作为 value 存储至 ES 中。这里,简单的提取出每个单词,并规范化(例如规范时态,缩写)得到的结果如下所示
-
dynamic mapping (动态映射 )
ES 的 mapping 非常类似于静态语言中的数据类型:声明一个变量为
int
类型的变量, 以后这个变量都只能存储int
类型的数据。同样的, 一个number
类型的 mapping 字段只能存储number
类型的数据。同语言的数据类型相比,mapping 还有一些其他的含义,mapping 不仅告诉 ES 一个 field 中是什么类型的值, 它还告诉 ES 如何索引数据以及数据是否能被搜索到。ES 中的 Mapping 还有以下几个特点:
-
Mapping 可以动态识别
ES 会根据数据格式自动识别索引中字段的类型,如无特殊需求,则不需要手动创建 Mapping
-
当需要对某些字段添加特殊属性时,就需要手动设置 Mapping(如是否分词、是否存储、定义使用其他分词器)
-
一个索引的Mapping一旦创建,若已经存储了数据,就不可以修改
-
-
shard (分片)
当索引的数据量太多时,受限于单个节点的内存、磁盘处理能力等,节点无法足够快速地响应客户端的请求,此时需要将一个索引上的数据进行水平拆分。拆分出来的每个数据部分称之为 shard (分片)。并且一般情况下,每个分片都会放到不同的服务器上。
3. Elastic Stack
1)Kibana
Kibana 是一款适用于 Elasticsearch 的数据可视化和管理工具,可以提供实时的直方图、线形图、饼状图和地图。Kibana 同时还包括诸如 Canvas 和 Elastic Maps 等高级应用程序;Canvas 允许用户基于自身数据创建定制的动态信息图表,而 Elastic Maps 则可用来对地理空间数据进行可视化。
经常用于:
- 日志分析;
- 基础设施指标和容器监测;
- 地理空间数据分析和可视化
2)Logstash
可用来对数据进行聚合和处理,并将数据发送到 Elasticsearch。Logstash 是一个开源的服务器端数据处理管道,允许您在将数据索引到 Elasticsearch 之前同时从多个来源采集数据,并对数据进行充实和转换。
4. 使用方式
它在本质上就是能够处理 JSON 请求的服务器,返回 JSON 数据
可以使用
curl
来发送 REST 请求,例如:curl -XGET 127.0.0.1:9200/tags/_search?pretty
请求查找索引为
tags
的所有数据
二、安装与基本操作
Step through this getting started tutorial to:
- Get an Elasticsearch cluster up and running
- Index some sample documents
- Search for documents using the Elasticsearch query language
- Analyze the results using bucket and metrics aggregations
官方 推荐在 Elastic Cloud 上运行,但我还是想在本地的 Linux 上运行。