Elasticsearch-基础介绍及索引原理分析
参考了多个博客和文章,自己手敲整理一遍,加深印象,文章最后有借鉴的链接。
基本概念
Elasticsearch是面向文档型数据库,一条数据就是一个文档,用JSO作为文档序列化的格式,比如下面的用户数据。
{
"name" : "John",
"sex" : "Male",
"age" : 25,
"birthDate": "1990/05/01",
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
在MySql中数据存储想到建立一个Use表,key代表为数据库中的字段,在Elasticsearch中这里就表示一个文档,当然这个文档会属于一个User类型,各式各样的类型存储于一个索引中。一个简易的Elasticsearch和Mysql的对照表。
关系数据库=》数据库=》表=》行=》列
Elasticsearch=》索引=》类型=》文档=》字段。
Elasticsearch是如何做到快速查询的
Elasticsearch使用的倒排索引比MySql的B+Tree的索引更快,为什么?
关系型数据库的B+Tree索引,二叉树的查询效率是LogN,插入新节点不用移动全部节点,兼顾插入和查询性能。具体的查询性能优化后续用单独的篇章来描述。
倒排索引:是通过字段中的内容来进行来建立倒排索引,假如对下面的数据进行索引
| ID | Name | Age | Sex |
| -- |:------------:| -----:| -----:|
| 1 | Kate | 24 | Female
| 2 | John | 24 | Male
| 3 | Bill | 29 | Male
对三个字段分别做倒排索引,结果看到为
Name:
| Term | Posting List |
| -- |:----:|
| Kate | 1 |
| John | 2 |
| Bill | 3 |
Age: