ElasticSearch(简称ES)是一款开源的分布式全文检索引擎,底层使用的是Java的Lucene库。ES其本身很容易实现集群部署,能够支持检索PB级的数据,还提供了RestfulAPI作为操作接口。相比直接基于Lucene开发,使用ES搭建分布式全文检索系统更加方便,ES本身实现了分布式模式,并提供了易用的接口隐藏底层实现的细节。
官网:https://www.elastic.co/cn/elasticsearch/
有关Lucene库,可以参考/Java/第三方库/Lucene-全文检索引擎
章节。
注:如果说ES有什么缺点,我个人认为唯一的缺点就是RestfulAPI设计的太怪异了,既不Restful也不符合正常人类的思维,更是存在Bulk API这种奇葩;Java客户端设计的更是一言难尽,其对自己的依赖封装像一坨屎,操作ES的接口对Builder模式的滥用到了无以复加的地步,给人一种不是已经发展了很多年的成熟产品的感觉。
对于学习环境,我们可以搭建一个简易的单节点ES服务。ES是Java语言编写的,我们直接在官网下载ES服务端程序即可,ES8安装包内置了JDK。下载完成后,运行bin
目录的启动脚本,即可运行ES服务。
./elasticsearch
ES8运行后,默认会开启安全配置,相关配置会自动追加写入配置文件,我们学习环境可以将安全配置关闭,但在生产环境不要这样做!修改配置文件config/elasticsearch.yml
:
xpack.security.enabled: false
修改后重启ES服务即可。
ES的RestfulAPI默认使用9200端口,集群通信会占用TCP的9300端口。
我们知道Lucene创建倒排索引时,需要对文章内容进行分词,Lucene默认的分词器对英文比较友好,而中文环境效果就很差了,如果需要对中文内容检索,比较常用的是IK分词器。
Github地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
这里要注意IK分词器插件的版本需要和ES对应,否则ES是无法启动的。我们下载压缩包后,在ES的plugins
内创建一个文件夹(可以随意起名),将压缩包解压到其中即可,ES启动时会自动搜索加载。
ES中的CatAPI可以用来查看集群状态信息,但要注意这组API返回格式不是JSON,因此只能用于手动访问接口查看,不适合程序读取:
GET http://localhost:9200/_cat/health?v=true
查看集群节点状态:
GET http://localhost:9200/_cat/nodes?v=true