Elasticsearch生态

目录

Elasticsearch核心概念

Elasticsearch实现全文检索的原理

Elasticsearch打分规则

常用的查询语法

ES数据同步方案


Elasticsearch生态非常丰富,包含了一系列工具和功能,帮助用户处理、分析和可视化数据,Elastic Stack是其核心部分:

Elastic Stack 也称 ELK Stack, 由以下几个部门组成:

  • Elasticsearch:核心搜索引擎,负责存储、索引和搜索数据
  • Kibana:可视化平台,用于查询、分析和展示Elasticsearch中的数据
  • Logstash:数据处理管道,负责数据收集、过滤、增强和传输到Elasticsearch。
  • Beats:轻量级的数据传输工具,收集和发送数据到Logstash或Elasticsearch。

Elasticsearch核心概念

索引Index:类似数据库中的表,数据存储和搜索的基本单位,每个索引可以存储多条文档数据。

文档 Document:索引中的每条记录,类似数据库中的行,文档以JSON格式存储。

字段 Field:文档中的每个键值对,类似数据库中的列。

映射 Mapping:用于定义Elasticsearch索引中文档字段的数据类型及其处理方式,类似与关系型数据库中的Schema表结构,帮助控制字段的存储、索引和查询行为。

集群 Cluster:多个节点组成的集群,用于存储数据并提供搜索功能。集群中的每个节点都可以处理数据。

分片 Shard:为实现横向扩展,ES将索引拆分为多个分片,每个分片可以分布在不同节点上。

副本Replica:分片的复制品,用于提高可用性和容错性。

Elasticsearch实现全文检索的原理

1、分词:Elasticsearch的分词器会将输入文本拆解成独立的词条(tokens),方便进行索引和搜索。分词的具体过程有以下几步:

字符过滤:去除特殊字符、HTML标签或进行Italy文本清理。

分词:根据指定的分词器(analyzer),将文本按规则拆分成一个个词条。例如,英文按照空格分,中文使用专门的分词器处理。

词汇过滤:对分词结果进行过滤,如去掉 停用词"the""is" 或进行词形归并。

2、倒排索引

倒排索引是Elasticsearch实现高效搜索的核心数据结构。它将文档中的词条映射到文档ID,实现快速查找。

工作原理:

  • 每个文档在被索引时,分词器会将文档内容拆解为多个词条。
  • Elasticsearch为每个词条生成一个倒排索引,记录改词条在哪些文档中出现。

例如:

  • 文档1:小俱是美女
  • 文档2:小俱是好人

中文分词后,生成的倒排索引大致如下:

|----|------|
| 词条 | 文档ID |
| 小俱 | 1,2 |
| 是 | 1,2 |
| 美女 | 1 |
| 好人 | 2 |

通过这种结果,可以快速找到包含该词的所有文档。

Elasticsearch打分规则

打分规则是用于衡量每个文档与查询条件的匹配度的评分机制。搜索结果默认排序方式是按照相关性得分,从高到底。Elasticsearch使用 BM25算法 来极端每个文档的得分,基于词频、反向文档频率、文档长度等因素来评估文档和查询的相关性。

打分的主要因素:

1.词频:查询词在文档中出现的次数,次数越多,得分越高。

2.反向文档频率:查询词在所有文档中出现的频率。词在越少的文档中出现,IDF 值越高,得分越高。

3.文档长度:较短的文档往往被认为更相关,因为查询词在短文档中占的比例更大。

常用的查询语法

DSL查询(Domain specific Language)

基于 JSON 的查询语言,它是 Elasticsearch 中最常用的查询方式。

复制代码
{
  "query": {
    "match": {
      "message": "Elasticsearch 是强大的"
    }
  }
}

这个查询会对message字段进行分词

ES数据同步方案

一般情况下,如果做查询搜索功能,使用 ES 来模糊搜索,但是数据是存放在数据库 MySQL 里的,所以说我们需要把 MySQL 中的数据和 ES 进行同步,保证数据一致(以 MySQL为主)。

数据流向:MySQL=>ES(单向)

数据同步一般有2个过程:全量同步(首次)+增量同步(新数据)

总共四种:

1、定时任务

比如1分钟1次,找到 MySQL 中过去几分钟内(至少是定时周期的2倍)发生改变的数据,然后更新到 ES。

优点:

  • 简单易懂,开发、部署、维护相对容易。
  • 占用资源少,不需要引入复杂的第三方中间件。
  • 不用处理复杂的并发和实时性问题。

缺点:

  • 有时间差:无法做到实时同步,数据存在滞后。
  • 数据频繁变化时,无法确保数据完全同步,容易出现错过更新的情况。
  • 对大数据量的更新处理不够高效,可能会引入重复更新逻辑。

应用场景:

  • 数据实时性要求不高:适合数据短时间内不同步不会带来重大影响的场景。
  • 数据基本不发生修改:适合数据几乎不修改、修改不频繁的场景。
  • 数据容忍丢失。

2、 双写

写数据的时候,必须也去写 ES;更新删除数据库同理。

可以通过事务保证数据一致性,使用事务时,要先保证 MySQL写成功,因为如果 ES 写入失败了,不会触发回滚,但是可以通过定时任务 +日志+告警进行检测和修复(补偿)。

优点:

  • 方案简单易懂,业务逻辑直接控制数据同步
  • 可以利用事务部分保证 MySQL 和 ES 的数据一致性。
  • 同步的时延较短,理论上可以接近实时更新 ES。.

缺点:

  • 影响性能:每次写 MySQL时,需要同时操作 ES,增加了业务写入延迟影响性能。
  • 一致性问题:如果 ES 写入失败,MySQL事务提交成功后,ES 可能会丢失数据;或者 ES 写入成功,MySQL事务提交失败,ES 无法回滚。因此必须额外设计监控、补偿机制来检测同步失败的情况(如通过定时任务、日志和告警修复)。
  • 代码复杂度增加,需要对每个写操作都进行双写处理。

应用场景:

  • 实时性要求较高
  • 业务写入频率较低:适合写操作不频繁的场景,这样对性能的影响较小。

3、使用Logstash数据同步管道

一般要配合 kafka 消息队列 + beats 采集器:

优点:

  • 配置驱动:基于配置文件,减少了手动编码,数据同步逻辑和业务代码解耦。
  • 扩展性好:可以灵活引入 Kafka 等消息队列实现异步数据同步,并可处理高吞吐量数据
  • 支持多种数据源:Logstash 支持丰富的数据源,方便扩展其他同步需求。

缺点:

  • 灵活性差:需要通过配置文件进行同步,复杂的业务逻辑可能难以在配置中实现,无法处理细粒度的定制化需求。
  • 引入额外组件,维护成本高:通常需要引入 Kafka、Beats 等第三方组件,增加了系统的复杂性和运维成本。

应用场景:

  • 大数据同步:适合大规模、分布式数据同步场景。
  • 对实时性要求不高:适合数据流处理或延迟容忍较大的系统。
  • 系统已有 Kafka 或类似的消息队列架构:如果系统中已经使用了 Kafka 等中间件,使用 Logstash 管道会变得很方便。

4、监听 MysQL Binlog

有任何数据变更时都能够实时监听到,并且同步到 Elasticsearch。一般不需要自己监听,可以使用现成的技术,比如 Canal。

Canal 的核心原理:数据库每次修改时,会修改 binlog 文件,只要监听该文件的修改,就能第一时间得到消息并处理。

优点:

  • 实时性强:能够在 MySQL数据发生变更的第一时间同步到 ES,做到真正的实时同步。
  • 轻量级:Binlog 是数据库自带的日志功能,不需要修改核心业务代码,只需要新增监听逻辑。

缺点:

  • 引入外部依赖:需要引入像 Canal 这样的中间件,增加了系统的复杂性和维护成本。
  • 运维难度增加:需要确保 Canal 或者其他 Binlog 监听器的稳定运行,并且对 MySQL 的 Binlog 配置要求较高。
  • 一致性问题:如果 Canal 服务出现问题或暂停,数据可能会滞后或丢失必须设计补偿机制。

应用场景

  • 实时同步要求高:适合需要实时数据同步的场景,通常用于高并发、高数
  • 据-致性要求的系统。
  • 数据频繁变化:适合数据变更频警目需要高效增量同步的场景
相关推荐
AWS官方合作商29 分钟前
应对海量数据归档难题?AWS Glacier 的低成本冷存储解决方案实践指南
大数据·云计算·aws
IT成长日记1 小时前
Hadoop文件操作指南:深入解析文件操作
大数据·hadoop·分布式
派可数据BI可视化2 小时前
数据中台、BI业务访谈(三):如何选择合适的访谈对象
大数据·信息可视化·数据挖掘·数据分析·商业智能bi
AI糊涂是福2 小时前
数字政府与智慧城市区别报告分析
大数据·人工智能·机器学习·架构·智慧城市
风生水气2 小时前
在supabase中实现关键词检索和语义检索
后端·搜索引擎
搞程序的心海4 小时前
Flink DataStream API深度解析(Scala版):窗口计算、水位线与状态编程
大数据·flink·scala
得物技术5 小时前
如何合理规划Elasticsearch的索引|得物技术
elasticsearch
我爱布朗熊5 小时前
5.Elasticsearch - Spring Data 框架
spring·elasticsearch·jenkins
Debug_TheWorld6 小时前
Hbase学习
大数据·hbase
阿里云大数据AI技术6 小时前
阿里云 Elasticsearch Serverless 检索增强型8.17版免费邀测!
大数据·elasticsearch