基础简介
Elastic Stack 组成
- Elastic Stack由Logstash、Beats、Elasticsearch和Kibana四大核心产品组成。
Elasticsearch
- Elasticsearch是Elastic Stack核心的分布式搜索和分析引擎,基于Java编程语言构建,可以在主流硬件平台上运行。
- 特点
- 1.使用简单的RESTful API,天然兼容多语言开发。
- 2.支持水平横向扩展节点,通过增加节点来实现负载均衡及增强集群可靠性。
- 3.面向文档,不使用“表”来存储数据,而使用“文档”来存储数据。
- 4.无模式,无须定义好字段类型、长度等,可以直接导入文档数据。
- 5.近实时存储,使每个字段都被索引且可用于搜索。
- 6.响应快,海量数据下能实现秒级响应速度。
- 7.易扩展,支持处理PB级的结构化或非结构化数据。
- 8.多租户,支持多个业务共用Elasticsearch服务,并且确保各业务间数据的隔离性。
- 9.支持多种编程语言,包含但不限于Java、Python、Go、C#、PHP、Python、Ruby等。
Logstash
- Logstash和Beats作为底层核心引擎,共同组成了数据摄取平台,可以实现数据标准化,使数据便于后续分析使用。Logstash提供免费且开放的服务器端数据处理管道(pipeline),能够从多个不同的数据源采集数据、转换数据,然后将数据发送到诸如Elasticsearch等“存储库”中,
- Logstash 可拔插框架, 支持 200多个插件
- 1.输入插件:日志文件、MySQL数据、Kafka队列、WebSocket、Beats和外部命令等。
- 2.过滤器插件:数据解析、转换等。
- 3.输出插件:Elasticsearch、关系型数据库、Kafka队列、文件本地存储、Slack等。
Kibana
- Kibana是一个免费且开放的工具。用户使用Kibana工具可以实现Elasticsearch数据可视化分析。还可以监控Elasticsearch集群的各项运维指标。
- 特点
- 1.Kibana是一个Web应用,它为Elasticsearch创建信息门户,提供基于关系化和层级方式的交互式数据可视化。
- 2.Kibana能够实现可视化的数据配置管理,比如:时区、格式等。
Beats
- Beats 是一个免费开放的平台, 集合了多种单一用途的数据采集器,使数据从成百上千或成千上万台的机器和系统向Logstash或Elasticsearch发送.
- Beats提供以下常用功能
- 1.将数据收集到本地。
- 2.将数据发送到Logstash或Elasticsearch。
- 3.配置简单,无需重新编译程序。
- 4.支持多种编程语言开发。
- 5.无需开发客户端代码。
Elasticsearch基础知识
搜索引擎基础知识
- 目标
- 全面
- 速度
- 准确性
- 核心要求
- 识别用户真正的需求
- 匹配用户需求
- 找到可信数据
- 评价指标
- 召回率:在一次返回的搜索结果中与搜索关键词相关的文档占所有相关文档的比例
- 精准率:本次搜索结果中相关文档所占的比例, 精准率的本质是衡量检索结果的查准率。
- 倒排索引
- 定义:在一个文档集合中,每个文档都可视为一个词语的集合,倒排索引则是将词语映射到包含这个词语的文档的数据结构
- 索引会记录文档ID、词频、位置信息等数据
- 构建索引的过程
- 1.把文档转换为词条
- 2.将每个文本文件对应的词条数量统计出来,生成一个文件名到词条数量的映射关系
- 3.生成一个词到文件名的映射关系(倒排索引)
- 全文检索
- 全文检索的前提是待检索的数据已经索引化,当用户查询时能根据建立的倒排索引进行查找。衡量全文检索系统的关键指标是全面、准确和快速。
- 特点
- 只处理文本,不处理语义
- 结果列表有相关度排序
- 支持高亮显示结果数据
- 原始的文本被切分为单个单词、短语或特殊标记后进行存储
- 给定词与它的变体(如近义词)会被折叠为一个词,如electrification和ectric、mice和mouse、“土豆”和“马铃薯”、“西红柿”和“番茄”等,每组词均被视为同一个词。
Elasticsearch的核心概念
- 对外提供服务的是整个集群,一个集群可以由多个节点组成,不同的节点根据用途不同会划分成不同的角色,每个节点的数据会划分出多个索引,一个索引对应多个分片数据。
- 与mysql对比
mysql数据库 | Elasticsearch 索引 |
---|---|
表(table) | 索引(index) |
行(row) | 文档(document) |
列(column) | 字段(field) |
模式(Schema) | 映射(Mapping) |
数据库 | 集群(cluster) |
SELECT * FROM | GET index/_search |
UPDATE * SET | Update API |
DELETE FROM | DELETE API |
-
集群
- 一组Elasticsearch节点的集合
-
节点
- 节点是指一个Elasticsearch实例,更确切地说,它是一个Elasticsearch进程,节点可以部署到物理机或者虚拟机上。
-
索引
- 索引是Elasticsearch中用于存储和管理相关数据的逻辑容器, 在Elasticsearch中,数据以JSON格式的文档存储在索引内, 每个索引都有唯一的名称,名称可以由用户指定,但是必须全部小写
-
分片
- 分片将包含索引数据的一个子集,并且其本身具有完整的功能和独立性,可以将分片近似看作“独立索引”。
- 当处理涉及多个数据分片的查询时,Elasticsearch会将查询请求分发到各个相关的分片,并将它们的结果集进行聚合。
- 一个分片本质就是一个Lucene索引。
-
副本
- 为了保证集群的容错性和高可用性、提高查询的吞吐率,Elasticsearch提供了复制数据的特性。分片可以被复制,被复制的分片称为“主分片”,主分片的复制版本称为“副本分片”或简称为“副本”.
- 创建索引时需要指定主分片,且主分片数一经指定就不支持动态更新了。而副本同样需要在创建索引时指定,每个分片可以有0或多个副本,副本数支持动态更新。
- 当某主分片所在的数据节点不可用时,会导致主分片丢失现象,若短时间内不对此采取补救措施,集群会将该分片对应的副本提升为新的主分片
- 7.X版本之后,默认主分片数为1,副本分片数为1.
-
文档
- Elasticsearch的基本存储单元
- 关系型数据库将数据以行或元组为单位存储在数据库表中,而Elasticsearch将数据以文档为单位存储在索引中
-
字段
- Elasticsearch中最小的单个数据单元
- Elasticsearch的一个字段可以设定两种或两种以上的数据类型
-
映射
- 映射类似于关系型数据库中的Schema,可以近似地理解为“表结构”。
- 每个索引都需要一个相对固定的表结构,包含但不限于字段名称、字段类型、是否需要分词、是否需要索引、是否需要存储、是否需要多字段类型等.
-
分词
- 建立倒排索引必不可少的一环
- 不同的分词方式需要不同的分词器