目录:
(1)初识ES-什么是elasticsearch
(2)初识ES-倒排索引
(3)ES与MySQL的概念对比
(4)安装ES
(1)初识ES-什么是elasticseach
随着业务的发展数据量越来越庞大,传统的MySQL的数据库,渐渐的难以满足复杂的 业务需求,所以在微服务的架构下,都会用到一种分布式搜索的技术,下面我们学习分布式当中流行的elasticsearch
(2)初识ES-倒排索引
Lucene的核心技术就是倒排索引
数据库一般情况下,会基于id创建一个索引,形成一个b+树,根据id进行检索的速度非常快,这种方式的索引是正向索引
如果搜索的字段不是id,是普通title字段,一般它不会加索引,即使加了索引,而使用的模糊匹配,即使字段上有索引,它也不会生效,没有索引,数据库会逐条扫描,判断每一行数据里面是否包含手机,不包含丢弃,逐行扫描最终会拿到完整的结果集
如果数据表的数据非常多,做局部内容检索的时候,逐行扫描性能非常差
倒排索引:经过了两次检索,第一次是根据用户的词条,去词条列表中进行查找,找到对应的文档id。第二次是根据文档id找文档。虽然是两次查找,但是每次都经过了索引进行查找,总的查询效率比逐条扫描高的多
正向索引:正向索引当中找是否包含手机的,需要一行一行的看,是先找到文档,看这条数据符合不符合要求 是根据文档找到词
倒排索引:是基于词条创建索引,关联到文档,小找到词,再找到对应的文档,是根据词找文档
倒排索引更适合与基于文档的内容够进行搜索,也就是说更复杂的需求
(3)ES与MySQL的概念对比
在MySQL里sq写好了通过Connnection把sq发出去,发给Mysql处理
在ES里DSL 写好了是基于http的请求发出去的,在ES中暴露的是RestFUL的接口,跟语言无关,任何语言只要能发http请求都可以把DSL发给ES处理
他们两个是各司其职的,比如你现在做的是下单付款的业务,对事务要求很高,应该使用MySQL作为数据存储
比如你做的是商品的搜索、页面的搜索,搜索比较复杂,使用ES去做
(4)安装ES
也需要安装kibanan,因为它提供了一个工具,可以很方便的让我们去编写DSL语句从而去操作ES
可以使用docker compose 也可以一键互联的,这里我们采用分别部署的方式,因为将来我们可能不需要kibanan只需要ES,但别部署之后,需要让他们手动互联了
docker network create es-net
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
- `-e "cluster.name=es-docker-cluster"`:设置集群名称
- `-e "http.host=0.0.0.0"`:监听的地址,可以外网访问
- `-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"`:内存大小
- `-e "discovery.type=single-node"`:非集群模式
- `-v es-data:/usr/share/elasticsearch/data`:挂载逻辑卷,绑定es的数据目录
- `-v es-logs:/usr/share/elasticsearch/logs`:挂载逻辑卷,绑定es的日志目录
- `-v es-plugins:/usr/share/elasticsearch/plugins`:挂载逻辑卷,绑定es的插件目录
- `--privileged`:授予逻辑卷访问权
- `--network es-net` :加入一个名为es-net的网络中
- `-p 9200:9200`:端口映射配置
运行容器:
查看一下:是否启动成功:
在浏览器通过ip地址也可以查看是否启动成功:
(5)安装Kibanan
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
kibana:7.12.1
- `--network es-net` :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
- `-e ELASTICSEARCH_HOSTS=http://es:9200"`:设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
- `-p 5601:5601`:端口映射配置
查看是否启动:
启动较慢,通过日志查看
浏览器就可以访问:
可以Add data:它帮助我们导入一些数据
Explore on my own:自己设置
选择第二个:
有导航栏进行各种各样的管理,Dev Tools工具是DSL的控制台:帮助我们去发送DSL语句,本质就是发送一个RestFul的请求到ES当中
查询所有数据
GET 请求,_search :做一次搜素 下面是DSL语句,那么它怎么知道ES呢?在安装的时候指定了ES地址,只需要把DSL语句准备好,请求方式和路径准备好,就可以发送了
这也是http的请求接口,只是不过请求路径为空,请求参数不需要参数