ElasticSearch
ES介绍 ES是一个建立在Apache Lucene之上的分布式、Restful风格的搜索和数据分析引擎。 基本概念 集群(Cluster):由多台服务器组成,共同存储全部数据,对外提供统一入口。 节点(Node):集群中的一台服务器就是一个Node,一个Node对应一个ES实例。 主节点(Master):管理集群范围的操作,如创建、删除索引、分配分片。只做轻量级元数据管理。 数据节点(Data):存储数据,执行数据相关的CRUD、搜索、聚合。 协调节点(Coordinating):转发请求,合并结果。每个节点默认都是协调节点,但可专门分离出来。 预处理节点(Ingest):在写入前对文档做简单处理,如重命名字段、删除字段等。 索引(Index):一类文档的集合,类似关系型数据库里的数据库。 文档(Document):一条记录,用JSON表示,是最基本的信息单元。 字段(Field):记录里的key,比如:name、title。 分片(Shard):一个索引可以水平分割为多个分片,分布在不同的节点上。分片又分为主分片和从分片。 副本(Replica):每个分片可以有一个或多个副本,用于容灾和提高查询性能。 倒排索引 基本思想:从文档找词 转变为 从词找文档。倒排索引建立的是 词项 到 文档ID 的映射。 逻辑层面:ES发起搜索请求时,面对的是一个倒排索引。 物理层面:每个倒排索引实际存储在多个Segment中,每个Segment都是一个独立的、自包含的小型倒排索引,拥有自己的词典、文档列表和评分数据。 示例: 正排索引: Doc1 → [ "elasticserch", "is", "fast" ] Doc2 → [ "fast", "search", "with", "elasticserch" ] 倒排索引: "elasticserch" → { Doc1, Doc2 } "fast" → { Doc1, Doc2 } "search" → { Doc2 } "is" → { Doc1 } "with" → { Doc2 } 假设要搜索"fast"这个词项,倒排索引必须回答两个问题: ...