A. ES基本介绍(简介)
ES,全称Elasticsearch,是一个基于RESTful接口的开源分布式搜索引擎,构建在Apache Lucene之上。它作为一个文档数据库,所有字段均可索引并支持搜索,支持大规模数据存储和处理,特别适合处理复杂搜索场景,具有高可用性和可扩展性。
ES的扩展方式分为垂直扩展(升级硬件)和水平扩展(增加服务器)。默认情况下,它通过内存Gateway存储索引数据,并能在集群关闭或重启时从持久化存储恢复。DistributedLucene Directory负责索引文件的管理,River作为数据源插件引入外部数据,Mapping定义字段类型和索引规则。
ES的搜索模块和索引模块提供基本操作支持,Discovery机制确保集群节点间的协调,包括节点发现和分片管理。Scripting功能允许使用脚本语言进行复杂操作,Transport负责节点间的通信。RESTful风格的API方便了应用编程,而第三方插件(3rd plugins)进一步扩展了其功能。
在实际应用中,ES可以作为网站后端处理大量数据,提供搜索功能;作为现有系统的扩展,增加搜索功能;或作为大规模日志框架的基础,支持事件的存储和分析。设计上,ES的逻辑结构包括文档(自我包含和层次型的)、类型、字段和映射,物理结构则涉及节点、分片和复制,以实现数据容量的水平扩展和高可用性。
在传统数据库中,数据以B-Tree结构存储,而在ES中,采用倒排索引,通过Term Index快速定位Term,进而查找包含特定关键词的文档。ES的索引原理与关系型数据库的B-Tree索引类似,但处理文本数据时更高效,适合处理大规模的非结构化信息。