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

使用教程

使用中间件及软件版本

序号中间件或软件版本
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": "<IDEOGRAPHIC>",
			"position": 0
		},
		{
			"token": "是",
			"start_offset": 1,
			"end_offset": 2,
			"type": "<IDEOGRAPHIC>",
			"position": 1
		},
		{
			"token": "中",
			"start_offset": 2,
			"end_offset": 3,
			"type": "<IDEOGRAPHIC>",
			"position": 2
		},
		{
			"token": "国",
			"start_offset": 3,
			"end_offset": 4,
			"type": "<IDEOGRAPHIC>",
			"position": 3
		},
		{
			"token": "人",
			"start_offset": 4,
			"end_offset": 5,
			"type": "<IDEOGRAPHIC>",
			"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使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值