Elasticsearch的基本概念
什么是搜索引擎
搜索引擎,即指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统.小到一个网站的内部搜索功能,如博客文章的搜索,电商平台商品的搜索,大到提供全网搜索的网站,如谷歌、百度等
倒排索引
索引就类似于目录,平时我们使用的都是索引,都是通过主键定位到某条数据,那么倒排索引呢,刚好相反,数据对应到主键.这里以一个博客文章的内容为例:
索引
文章ID | 文章标题 | 文章内容 |
---|---|---|
1 | 浅析JAVA设计模式 | JAVA设计模式是每一个JAVA程序员都应该掌握的进阶知识 |
2 | JAVA多线程设计模式 | JAVA多线程与设计模式结合 |
我们可以通过文章ID直接定位到具体的某篇文章
倒排索引
我们有一个站内搜索的功能,通过某个关键词来搜索相关的文章,那么这个关键词可能出现在标题中,也可能出现在文章内容中,那我们将会在创建或修改文章的时候,建立一个关键词与文章的对应关系表,这种,我们可以称之为倒排索引,因此倒排索引,也可称之为反向索引
关键词 | 文章ID |
---|---|
JAVA | 1 |
设计模式 | 1,2 |
多线程 | 2 |
倒排索引的数据结构
-
包含这个关键词的document list
-
关键词在每个document list中出现的次数 TF term frequency
-
关键词在整个索引中出现的次数 IDF inverse doc frequency(出现次数越多,相关度越低)
-
关键词在当前document list中出现的次数
-
每个document list的长度,越长相关度越低
-
包含这个关键词的所有doc的平均长度
IDF inverse doc frequency(出现次数越多,相关度越低)指的是 如果整个document list中每条数据都有这个词,那么都相关,这样相关度就低
ElasticSearch介绍
ElasticSearch的主要功能
ElasticSearch的主要功能,可以大致分为以下几个部分:
- 存储:海量数据存储(替代传统数据库或NoSQL数据库,存储不是目的,是为检索或分析服务的)
- 检索:根据一定条件对存储的数据进行检索
- 分析:通过存储的数据,通过一些分析手段,对数据进行聚合或分析,形成一些分析数据
Elasticsearch的优点
- 面向开发者友好,屏蔽了Lucene的复杂特性,集群自动发现(cluster discovery)
- 自动维护数据在多个节点上的建立
- 会帮我做搜索请求的负载均衡
- 自动维护冗余副本,保证了部分节点宕机的情况下仍然不会有任何数据丢失
- ES基于Lucene提供了很多高级功能:复合查询、聚合分析、基于地理位置等。
- 对于大公司,可以构建几百台服务器的大型分布式集群,处理PB级别数据;对于小公司,开箱即用,门槛低上手简单。
- 相遇传统数据库,提供了全文检索,同义词处理(美丽的cls>漂亮的cls),相关度排名。聚合分析以及海量数据的近实时(NTR)处理,这些传统数据库完全做不到。
ElasticSearch使用场景
- 在线商城商品检索
- 百度(全文检索、高亮、搜索推荐)
- 日志或交易数据收集,并进行数据分析和数据挖掘
- 数据变更监听、告警和通知
- 海量商业数据可视化查询、分析,为智能商业系统提供依据
ElasticSearch核心概念
-
cluster : 即集群,具有相同集群名称的节点的集合,每个集群至少包含两个节点.
-
node : 即节点,运行ES的实例,一个节点不代表一台服务器
-
field:一个数据字段,与index和type一起,可以定位一个doc
-
document:ES最小的数据单元 Json
{ "id": "1", "name": "小米", "price": { "标准版": 3999, "尊享版": 4999, "吴磊签名定制版": 19999 } }
-
Type:逻辑上的数据分类,es 7.x中删除了type的概念
-
Index:一类相同或者类似的doc,比如一个员工索引,商品索引。
-
Shard分片:
-
一个index包含多个Shard,默认5个primary shard,默认每个primary shard分配一个replica shard,replica shard的数量在创建索引的时候设置,如果想修改,需要重建索引。
-
每个Shard都是一个Lucene实例,有完整的创建索引的处理请求能力。
-
ES会自动在nodes上为我们做shard 均衡。
-
一个doc是不可能同时存在于多个节点分片(primary Shard)中的,但是可以存在于多个replica shard中。
-
primary shard和对应的replica shard不能同时存在于同一个节点,所以最低的可用配置是两个节点,互为主备。
primary shard:主分片
replica shard:副本分片
ElasticSearch中的相关概念与关系型数据库之间的对应
这个相关概念对应知识便于理解,不是一一对应关系
ElasticSearch中的相关概念 | 关系型数据库如MySQL中的相关概念 | 备注 |
---|---|---|
index | database/table | 数据库名称或表名称 |
type | table | 表名称(不再建议使用) |
document | row | 一行记录 |
mapping | schema | 数据库表结构 |
field | column | 某个字段 |
ElasticSearch其他说明
- ElasticSearch与关系数据库不同,它在进行数据操作前,不用先定义数据结构(即定义mapping),ElasticSearch会自动创建mapping,如果有特殊的字段定义,则需要定义mapping
- 操作ElasticSearch都是通过Restful接口来实现的
- POST : 新增或修改数据
- PUT : 修改数据
- GET : 获取(查询)数据
- DELETE : 删除数据
操作ElasticSearch的方式
- 通过客户端API
- 通过Kibana
- 通过curl命令操作
关于curl命令补充说明:
curl http://www.baidu.com
- GET请求:直接加上url即可
- POST请求:通过-d指定表单参数或使用-X POST来指定请求方式
- PUT请求:通过-X PUT来指定PUT请求
- DELETE:通过-X DELETE来指定DELETE请求
ElasticSearch相关的生态
ElasticSearch只是Elastic栈的一个组成部分
- ElasticSearch : 数据存储、检索和分析引擎
- Kibana : 数据可视化平台
- Beats : 数据采集平台
- Filebeat : 文件(日志)数据采集
- Metricbeat : 指标数据采集
- Packetbeat : 网络数据采集
- Winlogbeat : Windows事件日志采集
- Auditbeat : 审计数据采集
- Heartbeat : 运行时间监控数据采集
- Functionbeat : 无需服务器的数据采集
- Logstash : 数据集中、转换和存储
- ECE(ELASTIC CLOUD ENTERPRISE) : 集中编排一系列 Elasticsearch 集群
- APM : 应用程序性能管理