[ES三周年]理解 ES 查询机制

为什么需要使用 ES 进行搜索

ES除了拥有索引上的优势,最重要的还是数据的结构,这都是ES为什么效率高,会使用它的原因。

1,结构化数据 VS 非结构化数据

  • 结构化数据:
    也称作行数据,关系型数据库进行存储和管理,是由二维表结构来逻辑表达和实现(可以使用行、列来表现)的数据,严格地遵循数据格式与长度规范。
  • 非结构化数据:
    又可称为全文数据,不定长或无固定格式,不适于由数据库二维表来表现,包括所有格式的办公文档、XML、HTML、word文档,邮件,各类报表、图片和音频、视频信息等。

其他的不同之处还有:
结构化数据往往占用的空间较小,占企业数据的 20% 左右,容易管理。
非结构化数据通常占用更多的存储空间,约占企业数据的 80% 左右,比较难以管理

结构化数据 VS 非结构化数据

2,结构化搜索 vs 全文搜索

  • 结构化搜索:
    通常查询具有固有结构的数据,答案要么是肯定的,要么是否定的(即便是类似正则匹配这样的结构化搜索,正则表达式匹配数据也是确定的),数据要么属于查询结果集合,要么不属于。
  • 全文搜索:
    通常查询全文字段/文档的所有内容,答案返回的是一系列可能的数据,数据有一定概率属于结果集合。

到这里,为什么需要使用 ES 进行搜索的答案就很明确了:对于非结构化文本(比如评论内容),传统的结构化搜索难以满足需求,于是就会使用 ES 进行全文搜索。当然 ES 不仅可以进行全文搜索,也可以进行一部分的结构化搜索,更加扩大了他的应用范围。对于数据量巨大的情景,有公司会使用 ES 代替传统的 MySQL 管理数据。

ES 基本概念介绍

本小结主要是介绍 ES 的一些基本概念,目的是方便之前没有了解过 ES 的同学可以理解这次分享所介绍的内容。

1,ES 存储模型

ES 在设计存储模型时,考虑了大家从关系型数据库转换肯能带来的困难,于是设计了 Index、Type、Document、Field 分别于对应传统关系型数据库(比如 MySQL) 的 Database、Table、Row、Column。
注意: ES 存储时,并没有 Type 的概念,同一个Index 里的 Type 会拍平存储,只是方便理解才会对使用者提供这样一个抽象。由于Type 的存在会带来一些问题,在后续的版本里会逐步移除。

ES和SQL Database的对比

2,ES 与 Lucene

ES 底层基于 Lucene 开发,Lucene作为其核心来实现索引搜索的功能。我们虽然讲的是 ES,但很大一部分内容是 Lucene 的实现。​

正文完