前言
本系列文章主要是针对之前搭建以及实践基于springboot的搜索服务的总结。主要分为两部分:
1. 对于用Docker搭建分布式Elasticsearhc集群的一个介绍,以及一些实施中遇到问题的总结。(本篇)
2. 在基于Springboot的微服务体系中,如何更轻量级得使用Elasticsearhc以及一些复杂使用场景的总结:Elasticsearch实践(二)在Springboot微服务中集成搜索服务
搜索服务简述
结合业务的场景,在目前的商品体系需要构建搜索服务,主要是为了提供用户更丰富的检索场景以及高速,实时及性能稳定的搜索服务。作为使用Java技术栈的团队来说,可以选择使用比较好上手的三方搜索服务。另外一种选则就是搭建自己的搜索集群。结合自己公司的业务和场景来说,搭建搜索集群在投入使用后的成本可控,搜索服务和线上的其他微服务可以通过集群的内网IP通讯。
安装Elasticsearch的Docker镜像
目前Elasticsearch 版本到了5.X, Springboot 目前不支持5.X以上的elasticsearch。所以还是选择了2.2.4。
Dockerfile
关于ES的镜像,可以直接去Dockerhub上pull.但是官方版本一般都是ES的基础镜像,在实际的需求场景下,还需要安装一些插件,(比如ES的删除api插件。分词器插件等)所以可以选择pull基础镜像后,再重新tag,push到自己的镜像仓库中之后,用Dokcerfile重新build一个定制版的ES镜像。
如下就是一个基于基础镜像的,安装了analysis-ik分词器,以及ES官方的delete-by-query插件的dockerfile。定制完之后,重新tag然后push到自己的docker仓库就可以了。
FROM yourRegistry/elasticsearch:2.4.4
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update && apt-get install zip
RUN mkdir -p /usr/share/elasticsearch/plugins/ik
RUN cd /usr/share/elasticsearch/plugins/ik && wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v1.10.4/elasticsearch-analysis-ik-1.10.4.zip && unzip elasticsearch-analysis-ik-1.10.4.zip
RUN /usr/share/elasticsearch/bin/plugin install delete-by-query
分词器
关于分词器的选择,还是要根据不同的场景去判断。因为ES对于中文分词做的比较差,所以中文分词一般都需要另外安装其他分词器插件。本文以分词器ik为例。
需要注意的是Analysis-ik 的官方的插件版本需要和安装的Elasticsearch版本一致。具体的使用版本可以在官方的版本列表中查询:
Analysis-ik版本
Elasticsearch其他插件
在上述的Dockerfile 中添加了 delete-by-query插件。delete-by-query插件提供了对于多个Document的删除API。还可以选择的插件有:Elasticsearch API extension plugins 。
添加方式也是类似,在Dockerfile中添加 RUN /usr/share/elasticsearch/bin/plugin install XX 即可。
elasticsearch.yml配置
Elasticsearch 最重要的配置文件就是elasticsearch.yml了。在elasticsearch.yml 中需要配置ES集群的信息。具体配置内容如下(一下只是一个举例:
配置E