Elasticsearch简介与环境搭建
一、简介
ElasticSearch是一个分布式,高性能、高可用、可伸缩的搜索和分析系统,
根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
1、什么是搜索
百度、Google:我们想寻找一个我们喜欢的电影或者书籍就会去百度或者Google搜索一下。
互联网搜索:电商搜索商品,招聘网站搜索简历或者岗位
IT系统的搜索:员工管理搜索,会议管理搜索
2.如果用数据库做搜索会怎么样
3.正常的sql搜索存在的问题:
- 如果表记录上千万上亿了这个性能问题,另外一个如果有一个本文字段要在里面模糊配置,这个就会出现严重的性能问题
- 还不能将搜索词拆分开来,比如上面这个只能搜索名字是“张三”开头的员工,如果想搜出“张小三”那是搜索不出来的。
总体来说,用数据库来实现搜索,是不太靠谱的,通常性能也会很差
3、什么是全文检索、倒排索引和Lucene
举个简单的例子:比如最近上映的热剧(碟中谍6:全面瓦解),我们想搜索一下全面瓦解这个电视剧,可是在输入的过程,不小心输入了”全瓦解”,我们看看百度这个返回了什么,百度返回的结果确实是我想要找到的内容
全文检索
就比较好理解的,就是当我们输入“全瓦解”,会被拆分成”全”,“瓦解”2个词,用2个词去倒排索引里面去检索数据,检索到的数据返回。整个过程就叫做全文检索
倒排索引
如果这个用数据库的思维来做的话,假如一共100W的记录,按照之前的思路就是扫描100W次,而且每次扫描,都需要匹配那个文本所有的字符,确认是否包含搜索的关键词,而且还不能将搜索词拆解来进行检索
如果是利用倒排索引的话,假设还是100W,拆分出来的词语,假设有1000W个词语,那么在倒排索引中,就有1000W行。我们可能不需要检索1000W词,有可能检索1次,就能找到我们需要的数据,也有可能是100W次,也有可能是1000W次
这就是为什么我们命名搜索的是全瓦解,事实上只是按照瓦解搜索的,因为全在倒排索引中没有存在
4、ElasticSearch的应用场景
- 维基百科
- The Guardian(国外新闻网站)
- Stack Overflow(国外的程序异常讨论论坛)
- GitHub(开源代码管理)
- 电商网站
- 日志数据分析
- 商品价格监控网站
- BI系统
- 站内搜索
5.ElasticSearch的功能
分布式的搜索引擎和数据分析引擎
搜索:网站的站内搜索,IT系统的检索
数据分析:电商网站,统计销售排名前10的商家
全文检索,结构化检索,数据分析
全文检索:我想搜索商品名称包含某个关键字的商品
结构化检索:我想搜索商品分类为日化用品的商品都有哪些
数据分析:我们分析每一个商品分类下有多少个商品
对海量数据进行近实时的处理
分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索
海联数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理了
近实时:检索数据要花费1小时(这就不要近实时,离线批处理,batch-processing);在秒级别对数据进行搜索和分析
二、环境搭建
环境版本要求:
1. elasticsearch-7.8.0 2. elasticsearch-analysis-ik-7.8.0 3. kibana-7.8.0 4. node-v14.19.0-x64.msi
1.安装 elasticsearch-7.8.0
(1)Elasticsearch无需安装,解压即用。
(2)配置 elasticsearch-7.8.0\config\elasticsearch.yaml
http.cors.enabled: true #表示是否支持跨域,默认为false http.cors.allow-origin: "*" #当设置允许跨域,默认为*,表示支持所有域名
(3)进入elasticsearch/bin目录,可以看到下面的执行文件:elasticsearch.bat 双击运行,等全部加载完
可以看到绑定了两个端口:
- 9300:Java程序访问的端口
- 9200:浏览器、postman访问的端口
(3)我们在浏览器中访问:http://127.0.0.1:9200
看到了上面的信息,说明你的Elasticsearch已经安装成功了
2.配置Elasticsearch的客户端工具
(1)安装node.js
node-v14.19.0-x64.msi
安装完成用cmd进入安装目录执行 node -v可查看版本号
(2) 执行 npm install -g grunt-cli 安装grunt
安装完成后执行grunt -version查看是否安装成功,会显示安装的版本号
(3)解压安装elasticsearch-head-master
修改Gruntfile.js
在对应的位置加上hostname:’*’
(4)启动 elasticsearch-head-master
- 在命令提示符进入该文件夹根目录例:D:\environment\elasticsearch-head-master
npm install -g
- 执行npm run start 运行head插件,如果运行不成功建议重新安装grunt
npm run start
(5)打开浏览器访问head:http://127.0.0.1:9100健康值为绿色即成功
3 .安装Ik分词器
什么是IK分词器?
分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词,比如“我爱黎明”会被分为"我","爱","“黎","明" 。这显然是不符合要求的,所以我们需要安装中文分词器IK来解决这个问题。
IK提供了两个分词算法: ik. smart和ik_max_ word
其中ik_smart为最少切分, ik _max_word为最细粒度划分
ElasticSearch 默认采用的分词器, 是单个字分词 ,效果很差 ,所以我们需要安装一个更实用的分词器,这里采用IK分词器
1、下载
https://github.com/medcl/elasticsearch-analysis-ik
elasticsearch-analysis-ik-7.8.0.zip
(1)解压到elasticsearch主文件下plugins下的一个新建文件夹,我们起名为ik
例:解压到\elasticsearch-7.8.0-windows-x86_64\elasticsearch-7.8.0\plugins\ik
(2)重启elasticsearch主文件和客户端工具
正常能通过
且
http://127.0.0.1:9100/健康值仍为绿色,成功
4. Kibana安装
Kibana是一个针对Elasticsearch的开源分析及可视化平台 ,用来搜索、查看交互存储在Elasticsearch索引中的数据。 使用Kibana,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板( dashboard )实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编码或者额外的基础架构,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。
官网:https://www.elastic.co/cn/kibana
注意:使用的ES版本要与Kibana的对应
elasticsearch-7.8.0
kibana-7.8.0
下载完成解压kibana-7.8.0,
修改kibana/config/kibana.yml
将连接es服务的配置 注释去除,使得有效
双击kibana.bat启动即可, 访问http://localhost:5601/
在Kibana目录下的config中修改Kibana.yml文件,最后一行加上
i18n.locale: "zh-CN"
重启即可
ElasticSearch、head、Kibana三个服务: