JavaEE:Elasticsearch安装(Windwos)与使用

说明:

基于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"}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值