哪些企业在用ES
国内现在有大量的公司都在使用 Elasticsearch,包括京东、58、携程、滴滴、今日头条、饿了么、360安全、小米、vivo等诸多知名公司。
除了搜索之外,结合Kibana、Logstash、Beats,Elastic Stack还被广泛运用在大数据和实时分析领域,包括日志分析、指标监控、信息安全等多个领域。
它可以帮助你探索海量结构化、非结构化数据,按需创建可视化报表,对监控数据设置报警阈值,甚至通过使用机器学习技术,自动识别异常状况。
那什么是elasticsearch
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
- 实时分析的分布式搜索引擎。
- 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
大名鼎鼎的Lucene 搜索引擎被广泛用于搜索领域,但是操作复杂繁琐,总是让开发者敬而远之。而 Elasticsearch将 Lucene 作为其核心来实现所有索引和搜索的功能,通过简单的 RESTful 语法来隐藏掉 Lucene 的复杂性,从而让全文搜索变得简单。
ES在Lucene基础上,提供了一些分布式的实现:集群,分片,复制等。
搜索为什么不用mysql而用es
MySQL默认使用innodb引擎,底层采用b+树的方式来实现,而Es底层使用倒排索引的方式实现,使用倒排索引支持各种维度的分词,可以掌控不同粒度的搜索需求。(MYSQL8版本也支持了全文检索,使用倒排索引实现,有兴趣可以去看看两者的差别)。
如果使用MySQL的%key%的模糊匹配来与es的搜索进行比较,在8万数据量时他们的耗时已经达到40:1左右,毫无疑问在速度方面es完胜。
综上所述 在搜索领域非常火的elasticsearch,很多公司都在使用,所以如果说你还不知道es可能就会被人鄙视哦,下面就跟着我一起练习起来。
这里我使用docker容器进行安装部署
建议先关闭防火墙
systemctl stop firewalld
查看防火墙状态
systemctl status firewalld
然后重启docker
systemctl restart docker
Elasticsearch安装
docker安装es
我们这里安装的是最新的7.6.2版本
docker pull elasticsearch:7.6.2
启动es
这里需要注意一下,在启动的时候加上-e ES_JAVA_OPTS="-Xms=256m -Xms=256m" 参数,给es分配256m的内存大小。不然后面在es中安装其它应用如IK分词器可能会报错,如下图!
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" --name es -p 9200:9200 -p 9300:9300 -e "cluster.name=elasticsearch" -e "discovery.type=single-node" -d elasticsearch:7.6.2
检查es是否安装完成
curl http://localhost:9200
或者在浏览器中打开
http://192.168.232.132:9200
这个网址,注意替换成你自己的主机ip。
看到如下内容即表示安装成功!
{
"name" : "0cd29a7c4694",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "5r9QcaUjQGyykvIPHGkZsg",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
修改配置,解决跨域访问问题
首先进入到容器中,然后进入到指定目录修改elasticsearch.yml文件
docker exec -it es bash
cd /usr/share/elasticsearch/config/
vi elasticsearch.yml
在elasticsearch.yml的文件末尾加上:
http.cors.enabled: true
http.cors.allow-origin: "*"
修改配置后退出重启容器即可
exit
docker restart es
安装ik分词器
es自带的分词器对中文分词不是很友好,所以我们下载开源的IK分词器来解决这个问题。首先进入到plugins目录中下载分词器,下载完成后然后解压,再重启es即可。具体步骤如下:
注意:elasticsearch的版本和ik分词器的版本需要保持一致,不然在重启的时候会失败。
docker exec -it es bash
cd /usr/share/elasticsearch/plugins/
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
kibana安装
docker安装kibana
docker pull kibana:7.6.2
启动kibana
docker run --name kibana --link=es:es -p 5601:5601 -d kibana:7.6.2
进入kibana容器后台,配置kibana.yml
docker exec -it kibana bash
cd config/
vi kibana.yml
重启kibana
docker restart kibana
启动以后可以打开浏览器输入
http://192.168.232.132:5601
就可以打开kibana的界面了。
kibana启动会有点慢,先出下下图所示
等待一会儿,即可看到kibana界面
测试es使用ik分词
POST /_analyze
{
"analyzer": "ik_max_word",
"text": "欢迎关注厚溥技术微信公众号栈,伴随你一起学习成长!"
}
到这里我们的es就部署成功了
下一篇:关于Springboot整合es,请移步微信公众号"厚溥技术栈"