说明:
基于Lucene的搜索服务器,分布式搜索引擎,基于RESTful web接口。
CentOS7环境Elasticsearch、head插件、IK分词器安装方法:JavaEE:Docker上安装Elasticsearch_無_爲的博客-CSDN博客。
此文中均为Windwos环境下。
一、安装/运行Elasticsearch服务器(Windows环境):
1.下载Elasticsearch压缩包(此处下载WINDOWST版本),并解压到D:\elasticsearch-7.8.0:
https://www.elastic.co/cn/downloads/elasticsearch
2.运行Elasticsearch服务器:
(1)打开CMD命令行工具,cd到elasticsearch-7.8.0/bin目录:
> d:
> cd D:\elasticsearch-7.8.0\bin
(2)输入以下命令运行服务器:
> elasticsearch
3.访问是否成功(看到页面显示json就是成功):
http://127.0.0.1:9200/
二、用Postman操作Elasticsearch服务器中的索引库,实现增删改查:
前提:启动Elasticsearch服务器
1.创建索引库:
语法(PUT方式):http://127.0.0.1:9200/索引库名
URL:http://127.0.0.1:9200/mall
2.创建文档并添加数据:
语法(POST方式):http://127.0.0.1:9200/索引库名/文档名
URL:http://127.0.0.1:9200/mall/user
请求JSON:
{
"name": "杨先生",
"age": 18
}
3.查询文档中的数据:
(1)查询全部:
语法(GET方式):http://127.0.0.1:9200/索引库名/文档名/_search
URL:http://127.0.0.1:9200/mall/user/_search
(2)按_id值查询:
语法(GET方式):http://127.0.0.1:9200/索引库名/文档名/_id值
URL:http://127.0.0.1:9200/mall/user/oEvJMnMB9TXurVorFlOo
(3)按字段条件查询:
语法(GET方式):http://127.0.0.1:9200/索引库名/文档名/_search?q=字段名:字段值
URL:http://127.0.0.1:9200/mall/user/_search?q=age:18
(4)模糊匹配查询:
语法(GET方式):http://127.0.0.1:9200/索引库名/文档名/_search?q=字段名:*字段值*
URL:http://127.0.0.1:9200/mall/user/_search?q=name:*先*
4.修改文档中的数据(如果_id值不存在,则会创建新的):
语法(PUT方式):http://127.0.0.1:9200/索引库名/文档名/_id值
URL:http://127.0.0.1:9200/mall/user/oEvJMnMB9TXurVorFlOo
请求JSON:
{
"name": "杨先生2",
"age": 19
}
5.删除文档中的数据:
语法(DELETE方式):http://127.0.0.1:9200/索引库名/文档名/_id值
URL:http://127.0.0.1:9200/mall/user/oEvJMnMB9TXurVorFlOo
三、elasticsearch-head插件安装/使用:
说明:与Postman功能一致。
1.下载插件包,并解压:
https://github.com/mobz/elasticsearch-head
2.安装node.js环境:
(1)下载node-vx.x.x-x64.msi并安装:
https://nodejs.org/en/
(2)安装cnpm(cmd命令行中输入):
npm install -g cnpm --registry=https://registry.npm.taobao.org
(3)安装grunt工具:
npm install -g grunt-cli
(4)安装依赖(cd到elasticsearch-head-master目录):
D:\Program Files\elasticsearch-head-master>cnpm install
3.在elasticsearch.yml中增加跨域访问配置(在elasticsearch-7.8.0\config目录中,需要重启Elasticsearch服务器):
http.cors.enabled: true
http.cors.allow-origin: "*"
4.启动elasticsearch-head插件:
grunt server
5.在浏览器中打开界面进行操作:
URL:http://127.0.0.1:9100/
TAB各列说明:
(1)数据浏览:索引库列表,左侧点一下选中,点2下取消选中,如图所示:
(2)复合查询:和Postman操作完全一致,如图所示:
四、IK分词器:
说明:对词组进行切分,尤其是中文,如我是杨行者,切分为:我、是、杨行者
1.安装IK分词器:
(1)下载elasticsearch-analysis-ik-7.8.0.zip:
https://github.com/medcl/elasticsearch-analysis-ik/releases
(2)解压到elasticsearch-7.8.0\plugins目录下(改目录为ik,方便),重启elasticsearch服务器。
2.使用IK分词器:
(1)最粗切分:
http://127.0.0.1:9200/_analyze?analyzer=ik_smart&pretty=true&text=需要分词的词组
(2)最细切分:
http://127.0.0.1:9200/_analyze?analyzer=ik_max_word&pretty=true&text=需要分词的词组
3.扩充词汇库:
(1)在elasticsearch-7.8.0\plugins\ik\config中创建.dic为扩展名和文件(此处为yyh.dic,要UTF-8格式)。
(2)增加自定义词组,每个词组占一行:
我
是
杨行者
(3)加载自定义词库文件,在ik\config\IKAnalyzer.cfg中:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典,yyh.dic为自定义文件 -->
<entry key="ext_dict">yyh.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
五、使用Logstash将MySQL数据同步到Elasticsearch索引库:
1.安装/启动:
(1)下载logstash-7.8.0.zip并解压为D:\logstash-7.8.0:
https://www.elastic.co/cn/downloads/logstash
(2)启动Logstash(打开cmd,cd进入D:\logstash-7.8.0\bin目录,输入命令):
说明:
-e:后面跟着命令字符串
-f:后面跟着命令文件
stdin:输入
stdout:输出
命令行中输入(出现Successfully started表示成功了):
D:\logstash-7.8.0\bin>logstash -e "input { stdin {} } output { stdout {} }"
2.同步MySQL与E索引库的数据:
(1)以下URL中下载mysql连接驱动mysql-connector-java-8.0.20.jar,放在D:\目录下:
https://dev.mysql.com/downloads/connector/j/?os=26
(2)在logstash安装目录下创建用于存放命令文件的目录(名称随意,此处为D:\logstash-7.8.0\syncdata目录),并创建军mysql-to-elasticsearch.conf文件,内容如下:
input{ #配置加载mysql指定数据库的数据
jdbc{ #mysql数据库地址与端口
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/mall?serverTimezone=UTC"
#mysql登录用户名
jdbc_user => "root"
#mysql登录密码
jdbc_password => "root"
#mysql连接驱动jar包路径
jdbc_driver_library => "D:\mysql-connector-java-8.0.20.jar"
#mysql驱动类
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
#启用分页
jdbc_paging_enabled => "true"
#每页多少条
jdbc_page_size => "20"
#sql语句,此处查询user表的数据
statement => "SELECT * FROM user"
#或用statement_filepath => "sql语句文件路径"
#定时执行(格式:分 时 日 月 年,全部*表示每分钟执行)
schedule => "* * * * *"
}
}
output{ #配置输出数据到elasticsearch索引库
elasticsearch{ #配置elasticsearch索引库信息
#Elasticsearch服务器IP与端口
hosts => "127.0.0.1:9200"
#索引库名称(_index列),此处为mall索引库
index => "mall"
# _id列,值自增
document_id => "%{id}"
#文档类别(_type列),此处为user
document_type => "user"
}
stdout{ #打印到控制台
#将数据输出为json格式
codec => json_lines
}
}
(3)运行命令启动,并执行同步数据的命令(进入logstash\bin目录):
D:\logstash-7.8.0\bin>logstash -f ../syncdata/mysql-to-elasticsearch.conf
当控制台见到如下信息时,表示已执行同步:
[2020-07-11T17:36:00,337][INFO ][logstash.inputs.jdbc ][main][814ec9ed8978f8610ae1464525939b94c08fce72b6907657adb35ecfbb7ec203] (0.000859s) SELECT
* FROM (SELECT * FROM user) AS `t1` LIMIT 20 OFFSET 0
{"@timestamp":"2020-07-11T09:36:00.338Z","@version":"1","id":"1","name":"yang1"}
{"@timestamp":"2020-07-11T09:36:00.339Z","@version":"1","id":"3","name":"yang3"}
{"@timestamp":"2020-07-11T09:36:00.339Z","@version":"1","id":"2","name":"yang2"}