是什么

elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容。
elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域。而elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。

倒排索引

mysql的正向索引
image.png
倒排索引
image.png
无需全表扫描
image.png
正向索引

  • 优点:
    • 可以给多个字段创建索引
    • 根据索引字段搜索、排序速度非常快
  • 缺点:
    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引

  • 优点:
    • 根据词条搜索、模糊搜索时,速度非常快
  • 缺点:
    • 只能给词条创建索引,而不是字段
    • 无法根据字段做排序

      对比

      | MySQL | Elasticsearch | 说明 | | —- | —- | —- | | Table | Index | 索引(index),就是文档的集合,类似数据库的表(table) | | Row | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 | | Column | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) | | Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema) | | SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD |

image.png

MySQL:擅长事务类型操作,可以确保数据的安全和一致性
ES:擅长海量数据的搜索、分析、计算

安装

  1. //需要让es和kibana容器互联。这里先创建一个网络
  2. docker network create es-net
  3. //部署单点es:
  4. docker run -d \
  5. --name es \
  6. -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
  7. -e "discovery.type=single-node" \
  8. -v /home/yu/Desktop/es/es-data:/usr/share/elasticsearch/data \
  9. -v /home/yu/Desktop/es/es-plugins:/usr/share/elasticsearch/plugins \
  10. --privileged \
  11. --network es-net \
  12. -p 9200:9200 \
  13. -p 9300:9300 \
  14. elasticsearch:7.12.1
  15. - `-e "cluster.name=es-docker-cluster"`:设置集群名称
  16. - `-e "http.host=0.0.0.0"`:监听的地址,可以外网访问
  17. - `-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"`:内存大小
  18. - `-e "discovery.type=single-node"`:非集群模式
  19. - `-v es-data:/usr/share/elasticsearch/data`:挂载逻辑卷,绑定es的数据目录
  20. - `-v es-logs:/usr/share/elasticsearch/logs`:挂载逻辑卷,绑定es的日志目录
  21. - `-v es-plugins:/usr/share/elasticsearch/plugins`:挂载逻辑卷,绑定es的插件目录
  22. - `--privileged`:授予逻辑卷访问权
  23. - `--network es-net` :加入一个名为es-net的网络中
  24. - `-p 9200:9200`:端口映射配置

在浏览器中输入:http://XXXX:9200 即可看到elasticsearch的响应结果:
image.png
kibana可以给我们提供一个elasticsearch的可视化界面,便于我们学习。

  1. docker run -d \
  2. --name kibana \
  3. -e ELASTICSEARCH_HOSTS=http://es:9200 \
  4. --network=es-net \
  5. -p 5601:5601 \
  6. kibana:7.12.1
  7. ● --network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
  8. ● -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
  9. ● -p 5601:5601:端口映射配置

安装成功后,访问5601端口,界面如下:
image.png
配置IK分词器,进行智能分词(ik_smart和ik_max_word两种模式),并且ik分词器可以设置扩展词(卷王、萌萌哒。。。)和停用词(一些敏感词汇)。
地址https://github.com/medcl/elasticsearch-analysis-ik
将安装包重命名为ik,放入挂载的es-plugin目录中,重启应用

测试(dev_tool)
image.png
结果
image.png

常用REST API https://www.elastic.co/guide/en/elasticsearch/reference/7.12/indices-analyze.html