前言
为什么要写这个系列的文章呢,基于两个原因,一是在为企业招人的时候发现很多是工作多年的求职者都还没有接触过全文检索引擎,二是应朋友请求希望我写一写ElasticSearch(简称ES)的技术文章,该系列文章将分为如下几个部分:1.ES原理与安装;2.ES的基础用法 ;3.Java代码进行ES实战 ;4.ES的面试题讲解,喜欢的话请给个好评。
全文检索概述
我们在网络上的大部分搜索服务都用到了全文检索技术,全文检索的应用场景随处可见,招聘网站的职位搜索,电商网站的商品搜索,百度搜搜等等,这种业务场景往往意味需要对海量数据进行高效搜索。
那什么是全文检索呢?我们可以简单的理解为是从文本数据的搜索,比如:从百万千万级数据中搜索商品标题包含“鼠标”的商品,这一定是需要用到全文搜索,如果我们使用like来进行模糊匹配那简直是一场灾难,性能是极其的差。
全文搜索引擎可以做到传统关系型数据库无法做到的功能如:
- 搜索效率高,是like无法比拟的
- 相关度最高的排在最前面
- 关键词的高亮
需要注意的是:全文检索只处理文本,不处理语义。 比如在输入框中输入“中国的首都在哪里”,搜索引擎不会以对话的形式告诉你“在北京”,而仅仅是列出包含了搜索关键字的网页。
常见的全文检索引擎有
- 全文搜索工具包-Lucene(核心)
- 全文搜索服务器 ,Elastic Search(ES) 基于Lucene封装,上手快
- Solr基于lucene封装,上手较为麻烦
ElasticSearch认识
ElasticSearch是一个非常热门使用广泛的分布式的全文搜索引擎,它基于Apache Lucene进行封装,解决了Lucene使用复杂,不支持分布式/集群且只支持Java语言等问题。ES也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API来隐Lucene的复杂性,从而让全文搜索变得简单。
总的来说ElasticSearch简化了全文检索lucene的使用,同时增加了分布式的特性,使得构建大规模分布式全文检索变得非常容易。它具备如下特点
- 分布式的实时文件存储,分布式全文搜索引擎,每个字段都被索引并可被搜索
- 本身支持集群扩展,可以扩展到上百台服务器
- 处理PB级结构化或非结构化数据
- 简单的 RESTful API通信方式
- 支持各种语言的客户端
- 基于Lucene封装,使操作简单
ElasticSearch的安装
ES的安装比较简单,只需要官方下载ES的运行包,然后启动ES服务即可。ES的使用主要是通过能够发起HTTP请求的终端来接入,比如Poster插件、CURL、kibana等。ES服务只依赖于JDK,推荐使用JDK1.8+。本课程以在window环境下,ES 6.8.6版本为例,下载对应的ZIP文件
7.x以上的版本变化挺大的,企业用的比较多的还是7.x以下的版本,我这里以6.8.6为例,下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-6
解压即可,目录如下
- bin 是ES的执行命令
- config是配置文件目录,里面有一个 elasticsearch.yml是es配置文件,暂时不需要动它
- data是数据存储目录
- lib 是所依赖的jar包
- plugins是插件安装目录,比如分词器就在该目录安装
ES启动占用的内存比较大,可以通过修改config/jvm.options 文件来修改内存,该文件在es的安装目录中
比如修改为:-Xms512m -Xmx512m
双击安装目录 bin/elasticsearch.bat即可启动
使用浏览器访问:http://localhost:9200
看到上图信息,恭喜你,你的ES集群已经启动并且正常运行。
Kibana可视化工具安装
操作ES的方式有很多:比如基于rest api 方式的可以使用Postman 这一类的工具;在项目中使用ES当然是需要Java客户端来操作ES,官方推荐使用Kibana可视化工具,下载地址如下:https://www.elastic.co/cn/downloads/past-releases/kibana-6-8-6
下载好Kibana后解压即可,目录如下
默认情况下,Kibana会链接本地的默认ES http://localhost:9200
,如果需要修改链接的ES服务器,通过修改安装目录下 config/kibana.yml 将配置项 #elasticsearch.hosts: ["http://localhost:9200"]
取消注释即可修改连接的ES服务器地址。
双击/bin/kibana.bat
即可启动Kibana ,它会自己去连接已经启动的ES
启动成功后访问 http://localhost:5601
,功能很多我们暂时用不到,我们找到 Dev Tools
菜单,界面如下
进去之后界面效果如下
左边我们使用rest 请求进行操作,右边是结果显示面板。