全文检索Elasticsearch研究
基于虚拟机服务器自主部署ELK服务
学习目标
了解Elasticsearch的应用场景 学习基于服务器部署ELK服务 掌握索引维护的方法 掌握索引维护的方法 掌握基本的搜索API的使用方法
约束
需要提前掌握Lucene的索引方法、搜索方法
ELK的介绍和安装
1.简介
Elasticsearch是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于Restful web接口。Elasticsearch是用java开发的,是当前流行的企业级搜索引擎。能到达到实时搜索,稳定、可靠、快速、安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,如果搜索的数量非常多,而且分类繁杂,如果使用传统的数据库想要完成搜索工作的创建失非常困难的。我们希望搜索解决方案要运行速度快,我们希望有一个零配置和完全免费的搜索模式,能够简单的使用JSON通过HTTP来索引数据,而搜索服务器始终可用,并且服务器可以自如扩展,我们一般都会使用全文检索技术,如solr、Elasticsearch等。
2.突出优点
扩展性好,可部署上百台服务器集群,处理PB级数据 近实时的去索引数据、搜索数据
3.原理与应用
3.1 索引结构
下图是ElasticSearch的索引结构,下边==黑色部分是物理结构==,上边==黄色部分是逻辑结构==,逻辑结构可以更好的描述ElasticSearch的工作原理及去使用物理结构中的索引文件。

逻辑结构部分是一个倒排索引表:
将要搜索的文档内容分词,所有不重复的词做成分词列表。 将搜索的文档最终以Document方式存储起来。 每个词和document都有关联。
3.2 RESTFUL应用方法
ElasticSearch提供RESTFUL Api接口进行索引、搜索、并且支持多种客户端。
下图是ElasticSearch在项目中的应用方式:

用户在前端搜索关键字 项目前端通过http方式请求项目服务端 项目服务端通过http RESTful方式请求ES集群进行搜索 ES集群从索引库检索数据
4.ElasticaSearc安装
4.1 安装配置
安装ElasticaSearc7.9.0 该版本要求至少jdk1.8以上 解压elasticsearch-7.9.0-linux-x86_64.tar.gz bin:脚本目录,包括:启动、停止等可执行脚本 config:配置文件目录 data:索引目录,存放索引文件的地方 modules:模板目录,包括了es的功能模块 plugins:插件目录,es支持插件机制
4.2 配置文件
ES配置文件的地址根据安装形式的不同而不同:
使用zip、tar安装,配置文件的地址在安装目录的config下 使用RPM安装,配置文件在/etc/elasticsearch下 使用MSI安装,配置文件的地址在安装目录的config下,并且会自动将config目录地址写入环境变量ES_PATH_CONF
4.3 安装
为了模拟真实场景,我们将在linux系统下安装Elasticsearch
4.3.1 新建一个用户gavin
处于安全考虑,Elasticsearch默认不允许以root账号运行
创建用户:
useradd gavin
设置密码:
passwd gavin
切换用户:
su gavin
删除用户:
userdel -r gavin
普通用户增加sudo命令的权限:
vim /etc/sudoers
gavin ALL=(ALL) ALL
改变目录及其目录下所有文件的所有者为当前普通用户:
chown -R yourname dirname

4.3.3 解压缩
tar -zxvf elasticsearch-7.9.0-linux-x86_64.tar.gz
4.3.4 目录重命名
mv elasticsearch-7.9.0 elasticsearch
4.3.5 修改配置文件
进入config目录,修改elasticsearch.yml
和jvm.options
jvm.options
默认配置:
-Xms1g
-Xmx1g
内存占用太多,设置为不超过物理内存的一半:
-Xms512m
-Xmx512m
elasticsearch.yml
修改数据和日志目录
# 数据目录位置
path.data: /home/gavin/elasticsearch/data
# 日志目录位置
path.logs: /home/gavin/elasticsearch/logs
elasticsearch的安装目录默认只有logs目录,没有data目录,需要手动创建:
mkdir data

修改绑定的ip:
# 绑定0.0.0.0 允许任何ip来访问,默认只允许本机访问
network.host: 0.0.0.0
目前我们是学习单机安装,如果要做集群,只需要在这个配置文件中添加节点信息即可。
属性名 | 说明 |
---|---|
cluster.name | 配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。 |
node.name | 节点名,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理 |
path.conf | 设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/ elasticsearch |
path.data | 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开 |
path.logs | 设置日志文件的存储路径,默认是es根目录下的logs文件夹 |
path.plugins | 设置插件的存放路径,默认是es根目录下的plugins文件夹 |
bootstrap.memory_lock | 设置为true可以锁住ES使用的内存,避免内存进行swap |
network.host | 设置bind_host和publish_host,设置为0.0.0.0允许外网访问 |
http.port | 设置对外服务的http端口,默认为9200。 |
transport.tcp.port | 集群结点之间通信端口 |
discovery.zen.ping.timeout | 设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些 |
discovery.zen.minimum_master_nodes | 主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2 |
4.4 运行
进入elasticsearch/bin*目录下,可以看到如下的可执行文件:

然后输入运行命令:
./elasticsearch
4.5 启动报错
4.5.1 JDK版本过低 并且 不支持 root用户启动

解决方案:
1.因为elasticsearch7.9.X内置了jdk,默认是jdk11,但是向下兼容,所以可以不用处理
2.切换到普通用户进行启动,此时需要修改文件目录下所有文件的所有者为当前用户。
chown -R gavin /home/gavin/elasticsearch
4.5.2 集群节点导致启动报错

解决:
vim elasticsearch.yml
ip替换host1等,多节点请添加多个ip地址,单节点可写按默认来
#配置以下三者,最少其一
#[discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes]
cluster.initial_master_nodes: ["node-1"] #这里的node-1为node-name配置的值
启动成功:

可以看到绑定了两个端口:
9200:客户端访问端口 9300:集群节点之间通讯端口
我们在浏览器中访问:http://192.168.15.100:9200/

5.安装kibana
kibana是一个基于Node.js的Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能,生成各种图表,如柱状图、线状图、饼图等。
而且还提供了操作Elasticsearch索引数据的控制台,并且提供了一定的API提示,非常有利于学习Elasticsearch的语法。
5.1 安装
因为Kibana是依赖于node
查看是否服务器是否安装nodejs
[root@centos logs]# node -v
v9.3.0
如果没有安装,则安装步骤如下:
1.可以在下载页面https://nodejs.org/en/download/中找到下载地址,然后执行指令
wget https://nodejs.org/dist/v9.3.0/node-v9.3.0-linux-x64.tar.xz
2.解压缩
xz -d node-v9.3.0-linux-x64.tar.xz
tar -xf node-v9.3.0-linux-x64.tar
3.部署bin文件
根据自己nodejs的实际路径,依次执行下面命令,建立软连接:
ln -s /usr/local/software/node/bin/node /usr/bin/node
ln -s /usr/local/software/node/bin/npm /usr/bin/npm
ln -s /usr/local/software/node/bin/npx /usr/bin/npx
4.测试
node -v
npm -v
npx -v
5.1.1 解压缩kibana
tar -zxvf kibana-7.9.0-linux-x86_64.tar.gz
5.1.2 重命名安装包
mv kibana-7.9.0-linux-x86_64 kibana
5.1.3 修改配置
vim /home/gavin/kibana/config/kibana.yml
elasticsearch.hosts: ["http://192.168.15.100:9200"]
5.2 启动
cd /home/gavin/kibana/bin
./kibana
6.安装ik分析器
Lucene的IK分词器早在2012年就已经没有维护了,现在我们要使用的是在其基础上维护升级的版本,并且开发为ElasticSearch的继承插件了,与ElasticSearch一起维护升级了,版本也保持一致。
6.1 解压缩
unzip elasticsearch-analysis-ik-7.9.0.zip -d /home/gavin/kibana/plugins/ik-analyzer

6.2 重启elasticsearch

加载IK分词器插件、
6.3 测试
在Dev Tools --> console 中输入下面请求:
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}

API
Elasticsearch提供了Rest风格的API,即http请求接口,而且也提供了各种语言的客户端API
文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
1.客户端API
Elasticsearch支持的客户端非常多,如:https://www.elastic.co/guide/en/elasticsearch/client/index.html

点开Java Rest Client后,会有两个:

Java Low Level REST Client:是低级别封装,提供一些基础功能,但更灵活 Java High Level REST Client:是在Low Level Rest Client基础上进行的高级别封装,功能更丰富和完善,而且API会变得简单

2.如何学习
2.1 操作索引
java王者归来从入门迈向java语言
75元 包邮 (需用券)
去购买 >-->