热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

macOS下使用elasticsearch+elasticsearchhead+logstash+ik分词器+mysql数据同步教程

使用教程使用中间件及软件版本序号中间件或软件版本1elasticsearch7.6.22logstash7.6.23mysql84JDK115mysql-connector-j

使用教程


使用中间件及软件版本


序号中间件或软件版本
1elasticsearch7.6.2
2logstash7.6.2
3mysql8+
4JDK11
5mysql-connector-java8.0.19

安装elasticsearch


  1. elasticsearch下载地址 elasticsearch为:https://www.elastic.co/cn/downloads/elasticsearch
  2. 下载后解压到指定文件夹
  3. 切换到config文件夹下,编辑elasticsearch.yml文件,让其支持外网IP及elasticsearch-head跨域访问,详细配置如下:

支持外网IP访问配置:(如果不需要,则不配置即可)

network.host: 0.0.0.0
http.port: 9200

支持elasticsearch-head跨域访问配置:

http.cors.enabled: true
http.cors.allow-origin: "*"

切换到bin文件下,使用:./elasticsearch直接启动elasticsearch


  1. 下载elasticsearch-head

git clone https://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install // 速度慢的可以安装cnpm来代替或者yarn也可以,建议是cnpm
npm run start

  1. 然后访问http://127.0.0.1:9100接口看到界面

直接使用提供的plugin安装elasticsearch-head会报错,下载后解压也会报错,原因是因为node和npm环境问题,需要配置的东西略多,故方式是直接从github上拉取源码,按照上面的步骤4走即可。(任何形式的解压elasticsearch-head到plugins或者modules文件夹下都会导致elasticsearch启动失败)

也可以将elasticsearch-head clone到elasticsearch根目录下面,然后npm install安装依赖,然后更改elasticsearch-head根目录下的Gruntfile.js的

connect: {server: {options: {port: 9100,base: '.',keepalive: true}}
}

connect: {server: {options: {port: 9100,hostname: '*',base: '.',keepalive: true}}
}

启动elasticsearch后再启动head即可。

到此,安装教程就已经基本完成


安装中文分词器


  1. 前往分词下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases 下载对应版本的分词器
  2. 在编辑elasticsearch下的plugins文件夹创建叫“ik”的文件夹,然后解压压缩包到ik文件夹下,重启elasticsearch即可

elasticsearch-head使用教程


  1. 打开在浏览器打开head后,查看elasticsearch集群连接是否健康,green或者yellow为正常
  2. 确保正常后,点击“索引”选项卡创建一个名为myword的索引
  3. “基本查询”使用补齐,处于待完善状态
  4. 点击“复合查询”使用,主要是为了测试中文分词器ik的使用,然后点击“查询”,在第一个输入框输入elasticsearch服务地址,默认为:http://localhost:9200/ ,第二个输入框为请求及操作方式,然后基于刚刚创建的索引myword进行分词分析,输入:

不使用ik分词器的情况:

POST myword/_analyze

第三个输入框输入的为json数据,测试数据如下:

{"text": "我是中国人"
}

点击“提交请求”,未启用ik分词时的效果如下:

{"tokens": [{"token": "我","start_offset": 0,"end_offset": 1,"type": "","position": 0},{"token": "是","start_offset": 1,"end_offset": 2,"type": "","position": 1},{"token": "中","start_offset": 2,"end_offset": 3,"type": "","position": 2},{"token": "国","start_offset": 3,"end_offset": 4,"type": "","position": 3},{"token": "人","start_offset": 4,"end_offset": 5,"type": "","position": 4}]
}

使用ik分词器的情况:
其他方式都一致,唯一区别就是请求的json数据换成如下的数据

{"analyzer": "ik_max_word","text": "我是中国人"
}

其中特意申明了分词器analyzer类型为:ik_max_word,意思为启用ik分词器,提交请求后结果如下:

{"tokens": [{"token": "我","start_offset": 0,"end_offset": 1,"type": "CN_CHAR","position": 0},{"token": "是","start_offset": 1,"end_offset": 2,"type": "CN_CHAR","position": 1},{"token": "中国人","start_offset": 2,"end_offset": 5,"type": "CN_WORD","position": 2},{"token": "中国","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 3},{"token": "国人","start_offset": 3,"end_offset": 5,"type": "CN_WORD","position": 4}]
}

很明显结果就跟使用默认的分词器有很大的区别,分词得更加的恰当。对于上面两个分词效果的解释:


  1. 如果未安装ik分词器,那么,你如果写 “analyzer”: “ik_max_word”,那么程序就会报错,因为你没有安装ik分词器
  2. 如果你安装了ik分词器之后,你不指定分词器,不加上 “analyzer”: “ik_max_word” 这句话,那么其分词效果跟你没有安装ik分词器是一致的,也是分词成每个汉字。

关于ik分词器的分词类型(可以根据需求进行选择):

ik_max_word:会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

ik_smart:会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。请求json如下(post):

创建名为myword_test的索引;

POST myword_test/_analyze{"analyzer": "ik_smart","text": "我们都是很爱国的青年。"
}

结果如下:

{"tokens": [{"token": "我们","start_offset": 0,"end_offset": 2,"type": "CN_WORD","position": 0},{"token": "都是","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 1},{"token": "很","start_offset": 4,"end_offset": 5,"type": "CN_CHAR","position": 2},{"token": "爱国","start_offset": 5,"end_offset": 7,"type": "CN_WORD","position": 3},{"token": "的","start_offset": 7,"end_offset": 8,"type": "CN_CHAR","position": 4},{"token": "青年","start_offset": 8,"end_offset": 10,"type": "CN_WORD","position": 5}]
}

安装logstash使用及同步mysql数据到elasticsearch中


  1. logstash下载链接地址:https://www.elastic.co/cn/downloads/logstash

  2. 解压即可,网上说需要安装logstash-input-jdbc,但是在安装过程中,logstash提示已经提供了相关插件,不再需要安装了,直接使用默认的即可。

  3. 在logstash的根目录下创建一个叫“mysql”的文件夹,用来存放mysql驱动文件,驱动文件要求与mysql的版本要能匹配,不然会导致驱动不一致导致连接失败的情况

  4. 在config文件夹下创建jdbc.conf,配置内容如下:

# logstash同步mysql数据库到elasticsearch
input {stdin {}jdbc {type =>"search-education"# mysql 数据库链接jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/itaoke"# 用户名和密码jdbc_user => "root"jdbc_password => "jiangyun1992"jdbc_driver_library => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/mysql-connector-java-8.0.19.jar"jdbc_driver_class => "com.mysql.cj.jdbc.Driver"jdbc_paging_enabled => "true"jdbc_page_size => "50000"# 执行的sql 就是上一步创建的sql文件的绝对路径+文件名字,用于同步表的数据statement_filepath => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/search-education.sql"# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新schedule => "* * * * *"}jdbc {type =>"search-blog"# mysql 数据库链接jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/iwiteks_taoke_manager"# 用户名和密码jdbc_user => "root"jdbc_password => "jiangyun1992"jdbc_driver_library => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/mysql-connector-java-8.0.19.jar"jdbc_driver_class => "com.mysql.cj.jdbc.Driver"jdbc_paging_enabled => "true"jdbc_page_size => "50000"# 执行的sql 就是上一步创建的sql文件的绝对路径+文件名字statement_filepath => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/search-blog.sql"# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新schedule => "* * * * *"}
}filter {json {source => "message"remove_field => ["message"]}
}output {
if [type]=="search-education"{elasticsearch {# ES的IP地址及端口hosts => ["127.0.0.1:9200"]index => "search-education"#user => "elastic"#password => "123456"# 索引名称# 自增ID id必须是待查询的数据表的序列字段document_id => "%{id}"}}if [type]=="search-blog"{elasticsearch {hosts => ["127.0.0.1:9200"]index => "search-blog"document_id => "%{id}"}}stdout {# JSON格式输出codec => json_lines}
}

  1. 在刚刚创建的mysql文件夹下新建两个jdbc中使用到的sql脚本文件

search-education.sql:

SELECT * FROM organization

search-blog.sql:

SELECT * FROM basic_web_template

  1. 启动logstash命令与直接启动方式不一样,需要携带jdbc的配置文件中的配置到运行环境中,命令如下:

切换到logstash的bin目录下执行(建议直接写成shell脚本吧,每次都得携带参数执行命令,用起来麻烦)

./logstash -f ../config/jdbc.conf

启动一分钟后就能看到启动logstash的窗口打印同步数据日志了


  1. 到elasticsearch-head中点击“数据浏览”选项卡中点击指定的索引浏览即可,至于怎么使用head来进行简单或复合查询,后期再补全吧
    在这里插入图片描述

至此,基本完成了整个配置,数据同步为单张表,怎么做的更好就交给大家了,后面有空加上springboot集成es使用及追加kibana使用。


推荐阅读
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • npm 安装出错,求助高手分析原因并提供解决方案 ... [详细]
  • 在OpenShift上部署基于MongoDB和Node.js的多层应用程序
    本文档详细介绍了如何在OpenShift 4.x环境中部署一个包含MongoDB数据库和Node.js后端及前端的多层应用程序。通过逐步指导,读者可以轻松完成整个部署过程。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 单元测试:使用mocha和should.js搭建nodejs的单元测试
    2019独角兽企业重金招聘Python工程师标准BDD测试利器:mochashould.js众所周知对于任何一个项目来说,做好单元测试都是必不可少 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • SSL 错误:目标主机名与备用证书主题名称不匹配
    在使用 `git clone` 命令时,常见的 SSL 错误表现为:无法访问指定的 HTTPS 地址(如 `https://ip_or_domain/xxxx.git`),原因是目标主机名与备用证书主题名称不匹配。这通常是因为服务器的 SSL 证书配置不正确或客户端的证书验证设置有问题。建议检查服务器的 SSL 证书配置,确保其包含正确的主机名,并确认客户端的证书信任库已更新。此外,可以通过临时禁用 SSL 验证来排查问题,但请注意这会降低安全性。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • Git基础操作指南:掌握必备技能
    掌握 Git 基础操作是每个开发者必备的技能。本文详细介绍了 Git 的基本命令和使用方法,包括初始化仓库、配置用户信息、添加文件、提交更改以及查看版本历史等关键步骤。通过这些操作,读者可以快速上手并高效管理代码版本。例如,使用 `git config --global user.name` 和 `git config --global user.email` 来设置全局用户名和邮箱,确保每次提交时都能正确标识提交者信息。 ... [详细]
author-avatar
书友66599567
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有