什么是ElasticSearch,为什么要使用ES
Elasticsearch,开源的分布式搜寻及分析引擎,主要适用于以下场景:
- 搜寻引擎:快速检索文档、商品、新闻等之应用。
- 日志分析:透过日志数据分析,帮助企业认知业务绩效状况。
- 数据分析:辅助数据科学家与分析师进行数据剖析,以取得珍贵信息。
- 商业智能:辅助企业制定数据导向决策,达成商业上之成功。
- 实时监控:协助企业实时监测系统绩效、监控数据变动,以确保系统正常运作。
- 安全性:资助企业确保数据安全,保障数据不受非法窃取。
- 应用程序开发:资助开发者开发基于搜寻之应用程序,提升用户体验。
Elasticsearch具备以下优势:
- 高性能:擅长搜索与分析,包含多种查询语言与数据构架。
- 可扩展性:分布式构架,透过增加节点数增强搜索与分析能力。
- 灵活性:支持多数据类型、多语言,动态映射、快速调整模型以应对不同需求。
- 近实时分析:支持近实时分析(NRT near real time),提供实时数据查询,有利于快速数据检索。
- 可靠性:具备可靠性和高可用性,支持数据备份与恢复。
ElasticSearch为什么快?
Elasticsearch乃一款高性能、分布式搜索引擎,其速之快者,缘由如下:
- 分布式储存:采用分布式储存技术,将数据存储于多节点,分散负载,优化整体执行效能。
- 索引分片:将每索引分裂为多片段,实现并行查询,提升搜索速度。
- 全文索引:运用高效全文索引技术,将文档转化为可搜索的结构化数据,快速高效地完成搜索操作。
- 倒排索引:支持倒排索引数据结构,映射文档中每个词汇至文档出现位置,当搜索请求发生时,能快速检索包含所有搜索词的文档,迅速返回结果。
- 索引优化:通过索引优化技术提高查询速度。支持索引覆盖、索引下推等优化技术,加速查询操作。
- 预存储结果:插入数据时,预处理数据,将结果预存储于索引中,查询时无需重新计算,提升查询速度。
- 高效查询引擎:采用高效查询引擎,支持各种查询类型,为复杂查询提供优化策略,提高查询速度。
- 异步请求处理:采用异步请求处理机制,在请求抵达时立即回馈,避免长时间等待,提升用户体验。
- 内存存储:应用内存存储技术,在数据读写中减少磁盘访问次数,提高数据存储与查询效率。
综上所述,Elasticsearch之所以这么快,由于其运用多项高效技术,提升数据存储、查询、处理效率,构筑快捷搜索体验。
倒排索引是什么?
在Elasticsearch中,倒排索引是一种常见的索引结构,用于快速搜索文档中的特定词汇。
与传统索引结构相反,倒排索引的构建方式不同。传统索引结构是以文档为基础,每个文档包含多个词汇,然后根据这些词汇建立索引。而倒排索引则以词汇为基础,每个词汇对应多个文档,然后根据这些文档建立索引。这种结构使得在搜索过程中能够快速定位包含目标词汇的文档,从而加速搜索效率。
对于一份含有多个词汇的文档,倒排索引将每个词汇视作一个关键字(Term),记录该词汇所属文档的编号(Document ID)以及在文档中的位置(Term Position)。这种方式使得当用户输入关键字时,能够迅速查找到包含该关键字的文档编号,再通过编号找到相应文档内容。
倒排索引的优势在于能迅速锁定含指定关键字的文档,同时支持复杂搜索操作,如词组搜索、通配符搜索等。此外,由于倒排索引以词汇为基础构建,因此在数据分析和统计方面也具备重要意义。在Elasticsearch中,倒排索引是一种至关重要的索引结构,广泛应用于搜索引擎、日志分析、推荐系统等领域。
倒排索引建立过程
ES中的倒排索引建立过程主要有2个步骤,分别是分词、建立倒排索引
比如我们现在有三份文档内容,分别是
id | content |
1 | 深入理解Java核心技术 |
2 | 深入理解Java虚拟机—周志明 |
3 | Java编程思想—布鲁斯·埃克尔 |
分词
在倒排索引构建过程中,首先是将文档原始内容分割为词项(Term)。Elasticsearch 默认采用标准分析器(Standard Analyzer)进行分词处理。
经过分词处理后,您提供的三份文档内容将包含诸如"深入"、"理解"、"Java"、"核心"、"技术"、"编程"、"思想"、"周志明"、"布鲁斯·埃克尔"等词语。
生成倒排索引
将分开的词,当做索引,与对应的文档ID进行关联,形成倒排表。
词条 | 文档ID |
深入 | 1,2 |
理解 | 1,2 |
Java | 1,2,3 |
虚拟机 | 2 |
核心 | 1 |
技术 | 1 |
编程 | 3 |
思想 | 3 |
在倒排表生成完毕后,常规操作是对倒排表进行压缩,以减少其空间占用。流行的压缩算法包括Variable Byte Encoding和Simple9等技术。最后,压缩后的倒排表将被存储在磁盘上,以确保日后的搜索过程能够迅速访问倒排表。