ElasticSearch 详解

简介: 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 有望继续发展,为我们带来更多的惊喜和便利。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
存储 缓存 监控
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
小伙伴们,有没有遇到过程序突然崩溃,然后抛出一个OutOfMemoryError的异常?这就是我们俗称的OOM,也就是内存溢出 本文来带大家学习Java OOM的三大经典场景以及解决方案,保证让你有所收获!
6722 2
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
|
存储 JSON 数据格式
ElasticSearch基础概念解析
以上就是ElasticSearch的基础概念。理解了这些概念,你就可以更好地使用ElasticSearch,像使用超级放大镜一样,在数据海洋中找到你需要的珍珠。
339 71
|
24天前
|
SQL 人工智能 Java
告别传统 Text-to-SQL:基于 Spring AI Alibaba 的数据分析智能体 DataAgent 深度解析
超越 NL2SQL,DataAgent 具备自主规划与深度分析能力,赋能企业统计分析、根因定位等复杂场景挑战。
791 22
|
5月前
|
存储 人工智能 自然语言处理
阿里云 Elasticsearch 的 AI 革新:高性能、低成本、智能化的搜索新纪元
本文介绍了数智化浪潮下, 阿里云 Elasticsearch 打通了 云原生内核优化、RAG 闭环方案、云原生推理平台 三大能力模块,实现了从底层到应用的全链路升级,助力企业构建面向未来的智能搜索中枢。
807 22
|
存储 消息中间件 Kafka
官宣 | Fluss 0.6 发布公告
Fluss社区宣布0.6.0版本正式发布,历经3个多月开发,45位贡献者完成200+代码提交。新版本亮点包括:列压缩技术降低6倍存储空间、MergeEngine支持灵活主键合并策略、Prefix Lookup实现Delta Join功能。这些特性增强了Fluss的功能和性能,标志着其在构建下一代分析型流存储系统上的重要进展。
530 1
官宣 | Fluss 0.6 发布公告
|
6月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
存储 关系型数据库 MySQL
浅谈Elasticsearch的入门与实践
本文主要围绕ES核心特性:分布式存储特性和分析检索能力,介绍了概念、原理与实践案例,希望让读者快速理解ES的核心特性与应用场景。
1059 15
|
9月前
|
存储 缓存 自然语言处理
Elasticsearch 查询性能优化:从 3 秒到 300ms 的 6 个核心参数调优指南
本文分享某电商平台 Elasticsearch 性能调优实战,通过调整分片数、刷新间隔、缓存配置等 6 个核心参数,将商品搜索从 3 秒优化至 300 毫秒,显著提升查询性能与系统吞吐量。内容涵盖性能诊断、参数调优逻辑、实操方案及避坑指南,助力高频查询场景下的 ES 优化。
|
存储 监控 druid
Druid、ClickHouse、Doris、StarRocks 的区别与分析
本文对比了 Druid、ClickHouse、Doris 和 StarRocks 四款大数据分析引擎。它们均为 OLAP 引擎,采用列式存储和分布式架构,适用于海量数据分析。Druid 擅长实时分析与高并发查询;ClickHouse 以超高性能著称,适合复杂查询;Doris 提供易用的 SQL 接口,性能均衡;StarRocks 则以其极速查询和实时更新能力脱颖而出。各引擎在数据模型、查询性能、数据更新和存储方面存在差异,适用于不同的业务场景。选择时需根据具体需求综合考虑。
7130 20
|
缓存 Java 关系型数据库
【Java面试题汇总】ElasticSearch篇(2023版)
倒排索引、MySQL和ES一致性、ES近实时、ES集群的节点、分片、搭建、脑裂、调优。
【Java面试题汇总】ElasticSearch篇(2023版)