ElasticSearch
本文主要介绍了ElasticSearch的架构原理,存储模型,近实时搜索原理和常用插件es-head和es-sql的简单安装。
1 架构及原理
1.1 概述
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎Apache Lucene™ 基础上的搜索引擎,它不仅包括了全文搜索功能,还可以进行以下工作:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索
- 实时分析的分布式搜索引擎
- 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
Elasticsearch 可以布置成集群模式,它也是采用主从架构。master对外读写。建立索引的请求都先经过master,然后才会把集群索引信息同步到slave。
只有建立索引和类型需要经过 Master,数据的写入有一个简单的 Routing 规则,可以 Route 到集群中的任意节点,所以数据写入压力是分散在整个集群的。
Elasticsearch的数据结构
ES使用的是倒排索引。
- 正排索引:文档id到单词的关联关系
- 倒排索引:单词到文档id的关联关系
倒排索引(Inverted Index)是实现“单词-文档id矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。
倒排索引示例:
Elasticsearch索引的精髓
一切设计都是为了提高搜索的性能
Elasticsearch的索引思路
将磁盘里的东西尽量搬进内存,减少磁盘随机读取次数(同时也利用磁盘顺序读特性),结合各种奇技淫巧的压缩算法,用及其苛刻的态度使用内存。
1.2 存储结构
Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。
索引 Index
ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。
它是个逻辑命名空间,类似于数据库概念中的数据库。
类型 Type
类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。
类似于数据库概念中的一张表。
文档 Document
文档是索引和搜索的原子单位,它是包含了一个或多个域(Field)的容器,基于JSON格式进行表示。文档由一个或多个域