ElasticSearch认知

概览

为了理解Elasticsearch中数据是如何组织的,从以下两个角度来观察

  • 逻辑设计

搜索应用所要注意的。用于索引和搜索的基本单位是文档,可以将其认为 文档以类型来分组,类型包含若干文档, 类似表格包含若干
行。 是关系数据库里的一行。 最终一个或多个类型存在于同一索引中,索引是更大的容器, 类似于SQL中的数据库

ES SQL
文档
类型
索引 数据库
  • 物理设计

在后台Elasticsearch是如何处理数据的。
Elasticsearch将每个索引划分为分片,每份分片可以在集群中的不同服务器间迁移。通常,应用程序无须关心这些,因为无论Elasticsearch是单台还是多台服务器,应用和Elasticsearch的交互基本保持不变。但是,开始管理集群的时候,就需要留心了。 原因是,物理设计的配置方式决定了集群的性能可扩展性和可用性

逻辑设计

这个索引一类型-ID的组合唯一确定了Elasticsearch中的某篇文档。当进行搜索的时候,可以查找特定索引、特定类型中的文档,也可以跨多个类型甚至是多个索引进行搜索。

文档

  • 无模式
    Elasticsearch中的文档是无模式的,也就是说并非所有的文档都需要拥有相同的字段,它们不是受限于同一个模式。例如,在所有信息完备之前就要使用组织者数据时,你可以彻底忽略位置数据。
    映射包含某个类型中当前索引的所有文档的所有字段。但是不是所有的文档必须要有所有的字段
  • 动态添加字段
    如果一篇新近文档拥有一个映射中尚不存在的字段, Elasticsearch会自动地将新字段加入映射
  • 自动推导类型
    如果值是7, Elasticsearch会假设字段是长整型。
    这种新字段的自动检测也有缺点,因为 Elasticsearch可能猜得不对。例如,在索引了值7之后,你可能想再索引he11owor1a,这时由于它是 string而不是1ong,索引就会失败。对于线上环境、最安全的方式是在索引数据之前,就定义好所需的映射。

类型

  • 类型是文档的逻辑容器,类似于表格是行的容器。在不同的类型中,最好放入不同结构(模式)的文档
    没有物理实体与类型系相对应 ,从物理角度来看,同一索引中的文档都是写入磁盘,而不考虑它们所属的映射类型。

索引

准实时

每个索引有一个称为 refresh interva1的设置,定义了新近索引的文档对于搜索可见的时间间隔。从性能的角度来看,刷新操作的代价是非常昂贵的,这也是为什么更新只是偶尔进行。默认是每秒更新一次,而不是每来一篇新的文档就更新一次。如果看到 Elasticsearch被称为准实时的,就是指的这种刷新过程。

物理设计

分片

  • 默认情况下,每个索引由5个主分片组成,每个主分片有一个副本。一共10个分片。(至少一个主分片,0个或多个副分片)

  • 一份分片是一个包含倒排索引的目录中 也是 Lucene的索引

  • 分片也是 Elasticsearch将数据从一个节点迁移到另一个节点的最小单位

  • 副分片可以在运行的时候添加或者移除,而主分片不可以,创建索引之前必须确定主分片的数量

  • 过少的分片将限制可扩展性,但是过多的分片会影响性能。默认设置的5份是一个不错开始

存储文档

默认情况下,当存储一篇文档的时候,系统首先根据文档ID的散列值选择一个主分片,并将文档发送到该主分片
然后文档被发送到该主分片的所有副本分片进行存储。这使得副本分片和主分片之间保持数据的同步。
数据同步使得副本分片可以服务于搜索请求,并在原有主分片无法访问时自动升级为主分片。

默认地,文档在分片中均匀分布:对于每篇文档,分片是通过其ID字符串的散列决定的。每份分片拥有相同的散列范围,接收新文档的机会均等

搜索文档

在搜索的时候,接受请求的节点将请求转发到一组包含所有数据的分片。 Elasticsearch使用 round-robin的轮询机制选择可用的分片(主分片或副本分片),并将搜索请求转发过去。 Elasticsearch然后从这些分片收集结果,将其聚集到单一的回复,然后将回复返回给客户端应用程序。

倒排索引

倒排索引的结构使得 Elasticsearch在不扫描所有文档的情况下,就能告诉你哪些文档包含特定的词条(单词)。

  • 词条字典
    词条字典将每个词条和包含该词条的文档映射起来,搜索时没有必要为了某个词条扫描所有的文档,而是根据这个字典快速地识别匹配的文档。
  • 词频
    词频使得 Elasticsearch可以快速地获取某篇文档中某个词条岀现的次数。这对于计算结果的相关性得分非常重要。例如,如果搜索“ denver”,包含多个“ denver"”的文档通常更为相关。

水平扩展

增加更多的节点,工作负载被分摊,抵御高并发。无法提高单个搜搜索速度

垂直扩展

给机器增加更多的内存或cpu核心,更快的磁盘

工具

有几个图形化界面

  • Elasticsearch Head
    Elasticsearch Head可以通过 Elasticsearch插件的形式来安装这个工具,一个单
    机的HTTP服务器,或是可以从文件系统打开的网页。可以从那里发送HTTP请求,
    但是Head作为监控工具是最有用的,向你展示集群中分片是如何分布的。

参考资料

《ElasticSearch实战》