1 ElasticSearch简介
一.什么是ElasticSearch
- Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
二.ElasticSearch特点
- 可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上
- 将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES;
- 开箱即用的,部署简单
- 全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理
三.ElasticSearch体系结构
2 走进ElasticSearch
一.ElasticSearch部署与启动
二.Postman调用RestAPI
3 Head插件的安装与使用
- Head插件安装
- 下载head插件:https://github.com/mobz/elasticsearch-head
- 解压到任意目录,但是要和elasticsearch的安装目录区别开。
- 安装node js ,安装cnpm
- 将grunt安装为全局命令 。Grunt是基于Node.js的项目构建工具。它可以自动运行你所设定的任务
- 安装依赖
- 进入head目录启动head,在命令提示符下输入命令
- 打开浏览器,输入 http://localhost:9100
- 点击连接按钮没有任何相应,按F12发现有如下错误
No 'Access-Control-Allow-Origin' header is present on the requested resource
这个错误是由于elasticsearch默认不允许跨域调用,而elasticsearch-head是属于前端工程,所以报错。
我们这时需要修改elasticsearch的配置,让其允许跨域访问。
修改elasticsearch配置文件:elasticsearch.yml,增加以下两句命令:
4 IK分词器
一.IK分词器安装
- 下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases 下载5.6.8版
- 先将其解压,将解压后的elasticsearch文件夹重命名文件夹为ik
- 将ik文件夹拷贝到elasticsearch/plugins 目录下。
- 重新启动,即可加载IK分词器
二.自定义词库
- 进入elasticsearch/plugins/ik/config目录
- 新建一个my.dic文件,编辑内容:
修改IKAnalyzer.cfg.xml(在ik/config目录下)
5 搜索微服务开发
一.模块搭建
- 创建模块tensquare_search ,pom.xml引入依赖
- application.yml
- 创建包com.tensquare.search ,包下创建启动类
二.添加文章
- 创建实体类
创建com.tensquare.search.pojo包,包下建立类 - 创建数据访问接口
创建com.tensquare.search.dao包,包下建立接口 - 创建业务逻辑类
创建com.tensquare.search.service包,包下建立类 - 创建控制器类
创建com.tensquare.search.controller包,包下建立类
三.文章搜索
- ArticleSearchRepository新增方法定义
- ArticleSearchService新增方法
- ArticleSearchController方法
6 elasticsearch与MySQL数据同步
一.Logstash
- 什么是Logstash
Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。 - Logstash安装与测试
解压,进入bin目录
控制台输入字符,随后就有日志输出
stdin,表示输入流,指从键盘输入
stdout,表示输出流,指从显示器输出
命令行参数:
-e 执行
--config 或 -f 配置文件,后跟参数类型可以是一个字符串的配置或全路径文件名或全路径
(如:/etc/logstash.d/,logstash会自动读取/etc/logstash.d/目录下所有*.conf 的文本文件,然后在自己内存里拼接成一个完整的大配置文件再去执行)
二.MySQL数据导入Elasticsearch
- 在logstash-5.6.8安装目录下创建文件夹mysqletc (名称随意)
- 文件夹下创建mysql.conf (名称随意) ,内容如下:
- 将mysql驱动包mysql-connector-java-5.1.46.jar拷贝至D:/logstash-5.6.8/mysqletc/ 下 。
- 命令行下执行
7 Elasticsearch Docker环境下安装
一.容器的创建与远程连接
- 下载镜像
- 创建容器
- 修改demo的application.yml
- 运行测试程序,发现会报如下错误
这是因为elasticsearch从5版本以后默认不开启远程连接,需要修改配置文件 - 我们进入容器
此时,我们看到elasticsearch所在的目录为/usr/share/elasticsearch ,进入config看到了配置文件elasticsearch.yml我们通过vi命令编辑此文件,尴尬的是容器并没有vi命令 ,咋办?我们需要以文件挂载的方式创建容器才行,这样我们就可以通过修改宿主机中的某个文件来实现对容器内配置文件的修改 - 拷贝配置文件到宿主机
首先退出容器,然后执行命令: - 停止和删除原来创建的容器
- 重新执行创建容器命令
- 修改/usr/share/elasticsearch.yml 将 transport.host: 0.0.0.0 前的#去掉后保存文件退出。其作用是允许任何ip地址访问elasticsearch .开发测试阶段可以这么做,生产环境下指定具体的IP
- 重启启动
- 系统调优
我们一共需要修改两处
修改/etc/security/limits.conf ,追加内容
nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制
修改/etc/sysctl.conf,追加内容
限制一个进程可以拥有的VMA(虚拟内存区域)的数量
执行下面命令 修改内核参数马上生效 - 重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问
二.IK分词器安装
- 快捷键alt+p进入sftp , 将ik文件夹上传至宿主机
- 在宿主机中将ik文件夹拷贝到容器内 /usr/share/elasticsearch/plugins 目录下。
- 重新启动,即可加载IK分词器
三.HEAD插件安装
- 修改/usr/share/elasticsearch.yml ,添加允许跨域配置
- 重新启动elasticseach容器
- 下载head镜像
- 创建head容器