ElasticSearch 详解

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
简介: ElasticSearch 是一款优秀的开源搜索引擎,适用于大数据场景下的高效检索与分析。其分布式架构、实时搜索和灵活的数据分析功能使其能处理 PB 级数据量。相比 Solr,ES 在实时性、分布式架构和文档处理上更具优势。核心概念包括索引、文档、分片和副本等。ES 使用倒排索引实现快速搜索,区别于正向索引。与关系型数据库相比,ES 更适合非结构化数据和全文搜索。总结来说,ES 在电商搜索、日志分析等领域有广泛应用,未来有望带来更多创新。


一、为什么要学习 ElasticSearch

在大数据场景下,传统的关系型数据库在处理海量数据检索时,往往面临性能瓶颈。而 ElasticSearch 以其分布式、高可用、实时搜索等特性脱颖而出。

  1. 海量数据处理能力:能够轻松应对 PB 级别的数据量,通过分布式架构将数据分散存储在多个节点上,提升数据处理和检索效率。
  2. 实时搜索:对于实时性要求高的应用场景,如电商的商品搜索、社交平台的实时消息搜索等,ElasticSearch 能够近乎实时地将新数据索引并提供搜索服务。
  3. 灵活的数据分析:支持复杂的数据分析功能,如聚合分析,可以对数据进行分组、统计等操作,为业务决策提供有力支持。

二、ES 和 Solr 对比

  1. 相似点
  • 都是基于 Lucene:两者底层都依赖 Lucene 库来实现索引和搜索功能。
  • 应用场景相似:都可用于文本搜索、信息检索等场景。
  1. 不同点
  • 实时性:ElasticSearch 在实时性方面表现更为出色,它的数据写入后几乎可以立即被搜索到。而 Solr 在数据写入后,需要一定时间进行索引提交等操作,才能被搜索到。
  • 分布式架构:ES 天生就是分布式架构,从设计之初就考虑了分布式环境下的各种问题,如节点自动发现、负载均衡等。Solr 虽然也能实现分布式,但在分布式的易用性和扩展性上不如 ES。
  • 文档处理:ES 对文档的处理更加灵活,支持动态添加字段等操作。Solr 在这方面相对较为严格,需要预先定义好 Schema。

三、ElasticSearch 核心概念

  1. 索引(Index):可以理解为一个数据库,是具有相似特征的文档集合。例如,一个电商平台可以将商品数据索引、用户数据索引等分开存储。
  2. 类型(Type):在一个索引中,可以定义不同的类型来区分不同的数据结构。不过在 ElasticSearch 7.x 版本后,逐渐弱化了类型的概念。
  3. 文档(Document):是 ElasticSearch 中最小的数据单元,类似于关系型数据库中的一行记录。每个文档都有一个唯一的 ID,可以通过 ID 来进行文档的增删改查操作。
  4. 分片(Shard):为了处理海量数据,ES 将索引切分为多个分片,每个分片可以分布在不同的节点上。这样不仅提高了数据的存储能力,还能并行处理搜索请求,提升搜索性能。
  5. 副本(Replica):为了提高系统的可用性和容错性,ES 会为每个分片创建多个副本。当某个分片所在的节点出现故障时,副本可以替代其继续提供服务。

四、正向索引

正向索引是从文档到关键词的映射关系。例如,在一个文档集合中,每个文档都有唯一的标识,正向索引记录了每个文档包含哪些关键词。以一篇文章为例,正向索引会记录文章 ID 以及文章中出现的所有单词。当我们需要获取某个文档的内容时,可以通过正向索引快速定位。然而,在搜索场景下,正向索引存在局限性。如果我们要查找包含某个关键词的所有文档,就需要遍历所有文档,这种方式效率较低。

五、倒排索引

倒排索引是从关键词到文档的映射关系。它以关键词为索引项,记录每个关键词出现在哪些文档中,以及在文档中的位置等信息。例如,对于关键词 “苹果”,倒排索引会记录包含 “苹果” 这个词的所有文档 ID,以及 “苹果” 在每个文档中的具体位置。在搜索时,通过倒排索引可以快速定位到包含目标关键词的文档,大大提高了搜索效率。这也是 ElasticSearch 等搜索引擎能够实现快速搜索的关键技术之一。

六、正向索引与倒排索引的区别

  1. 数据结构:正向索引以文档为中心,记录文档包含的关键词;倒排索引以关键词为中心,记录关键词出现的文档。
  2. 搜索效率:正向索引在按文档 ID 查找文档内容时效率较高,但在按关键词搜索文档时效率较低;倒排索引则相反,在按关键词搜索时效率极高,能够快速定位到相关文档。
  3. 应用场景:正向索引适用于对单个文档进行内容检索的场景,如文档管理系统中根据文档 ID 获取文档内容。倒排索引则广泛应用于搜索引擎等需要根据关键词进行快速检索的场景。

七、ES 与关系型数据库对比与区别

  1. 数据模型
  • 关系型数据库:采用结构化的数据模型,数据以表格形式存储,表与表之间通过外键等方式建立关联关系。
  • ElasticSearch:采用非结构化的数据模型,以 JSON 格式的文档存储数据,文档之间没有严格的关联关系,更适合处理半结构化和非结构化数据。
  1. 查询语言
  • 关系型数据库:使用 SQL 语言进行查询,语法严谨,适用于复杂的关联查询、聚合查询等。
  • ElasticSearch:使用 DSL(Domain - Specific Language)进行查询,更专注于全文搜索、模糊搜索等功能,语法相对灵活。
  1. 事务处理
  • 关系型数据库:支持强事务处理,能够保证数据的一致性和完整性,适用于对数据准确性要求极高的场景,如银行转账等业务。
  • ElasticSearch:虽然也提供一定的一致性保证,但在事务处理能力上不如关系型数据库,更适合对数据一致性要求相对较低,对查询性能和扩展性要求较高的场景。

八、总结

ElasticSearch 作为一款优秀的开源搜索引擎,在海量数据的检索和分析方面具有独特的优势。通过深入了解其核心概念、与其他技术的对比以及底层的索引原理,我们能够更好地在实际项目中运用它。无论是在电商搜索、日志分析还是数据分析等领域,ElasticSearch 都能发挥重要作用。当然,在选择使用 ElasticSearch 时,也需要根据具体的业务需求和数据特点,权衡其与关系型数据库等其他技术的优缺点,以构建出最适合的解决方案。在未来的数据处理和搜索领域,ElasticSearch 有望继续发展,为我们带来更多的惊喜和便利。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
8月前
|
存储 搜索推荐 关系型数据库
为什么需要 Elasticsearch
为什么需要 Elasticsearch
62 0
|
4月前
|
存储 关系型数据库 MySQL
elasticsearch系列(一)
elasticsearch系列(一)
elasticsearch系列(一)
|
8月前
|
自然语言处理 Java 网络安全
ElasticSearch
ElasticSearch
84 2
|
4月前
|
消息中间件 数据采集 Kafka
elasticsearch系列(二)
elasticsearch系列(二)
|
8月前
|
Java 关系型数据库 API
ElasticSearch使用篇
ElasticSearch使用篇
|
缓存 API 索引
Elasticsearch(五)
Elasticsearch(五)
76 0
Elasticsearch(五)
一起来学ElasticSearch(十)
前言 目前正在出一个Es专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 承接上文,上节给大家讲的es聚合还有一点内容,本节给大家更完~ 本文偏实战一些,为了方便演示,本节示例沿用上节索引,好了, 废话不多说直接开整吧~ 聚合排序 我们如何在聚合结果中进行自定义字段排序呢?