一.什么是Elasticsearch
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎,Elasticsearch和Mysql,Redis,MongoDb,Clickhouse等一样,都可以认为它是一种数据库
二.为什么要用Elasticsearch
设想一个场景:
user表有6千多万条数据,我想查询nick中包含”大帅哥“的数据:
Select nick from user where nick like '%大帅哥%'
比如,我把大帅哥写成了帅哥,写成了大帅锅,写成了dashuaige,甚至写成了dsg,大帥哥等,此时的 Mysql是无法处理
的,而Elasticsearch借助分词器(后续介绍),可以简单快速查询检索。
三.Mysql和Elasticsearch概念对比
1、 MySQL 的数据库(DataBase)相当于 Index(索引),数据的逻辑集合,ES 的工作主要也是创建索引,查询索引。
2、 一个数据库里会有多个表(Table),同样的一个 Index 也会有多个 type。
3、 一个表会有多行(Row),同样的一个 Type 也会有多个 Document。
4、 Schema 指定表名,表字段,是否建立索引等,同样的 Mapping 也指定了 Type 字段的处理规则,即索引如何建立,是否分词,分词规则等。
5、MySQL 中一个row对应多个Column,同样的一个Document会有多个Fields。
6、 在 MySQL 中索引是需要手动创建的,而在 ES 一切字段皆可被索引,只要在 Mapping 在指定即可。
![](https://i-blog.csdnimg.cn/blog_migrate/421b4cce682653848b835e8dc67b5817.png)
总结:
Mysql关系型数据库,适用于结构化数据(数据与数据之间存在强关联)的数据存储和查询和数据与数据之间的关系处理,大量数据检索需要全表查询,性能差
Elasticsearch非关系型数据库,适用于数据与数据之间相对独立的大量数据的检索查询,数据修改效率低于Mysql,不善于处理数据之间的关系
四.实际操作
通过Docker,使用es和kibana镜像,开启es服务和kibana(后续介绍)。
![](https://i-blog.csdnimg.cn/blog_migrate/59028de9f894dac1258c0ac92baf0076.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4d81d7fe764466b5315a7e588f9f91c7.png)
我们使用的版本号是:5.6.12
使用Kibana Dev Tool(后续介绍)操作:
- 索引的新建
- Setting和Mapping的解释
Setting
:es通过settings设置索引的基础参数,包括分词器、分片等。
PUT /baobaokanjia/
{
"settings": {
"number_of_shards": 1,
"analysis": {
"analyzer": {
"ik_max_word_t2s": {
"char_filter": [
"tsconvert"
],
"tokenizer": "standard"
},
"ik_smart_t2s": {
"char_filter": [
"tsconvert"
],
"tokenizer": "standard"
},
"pinyin_analyzer": {
"tokenizer": "my_pinyin"
}
},
"char_filter": {
"tsconvert": {
"convert_type": "t2s"