python使用ElasticSearch和logstash-input-jdbc实现搜索引擎部署
一、环境下载(所有文件放在ES6.3.1文件夹下)
1.下载elasticsearch-6.3.1:
1.下载:
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.tar.gz
2.解压:
tar -vxf elasticsearch-6.3.1.tar.gz
2.下载ik分词器(Elasticsearch是不支持中文分词的,ik分词器支持中文,且分词器版本最好与elasticsearch版本保持一致):
1.下载地址:
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.1/elasticsearch-analysis-ik-6.3.1.zip
2.解压zip文件
3.将解压后的文件目录elasticsearch-analysis-ik-6.3.1放到elasticsearch的安装目录下的plugins下
3.下载kibana6.3.1 :
1.下载地址:
https://artifacts.elastic.co/downloads/kibana/kibana-6.3.1-darwin-x86_64.tar.gz
2.解压:
tar -xvf kibana-6.3.1-darwin-x86_64.tar.gz
4. 下载logstash6.3.1
1.下载地址:
https://artifacts.elastic.co/downloads/logstash/logstash-6.3.1.tar.gz
2.解压:
tar -xvf logstash-6.3.1.tar.gz
3.安装插件:
cd logstash-6.3.1
./bin/logstash-plugin install logstash-input-jdbc
出现以上提示表明插件安装成功
5.下载mysql-connector-java-5.1.47-bin.jar
1.下载地址:
https://dev.mysql.com/downloads/file/?id=480090
2.解压:
tar -xvf mysql-connector-java-5.1.47.tar.gz
3.把解压后的文件夹里的mysql-connector-java-5.1.47-bin.jar文件放入ES6.3.1文件夹
ES6.3.1文件夹:
二、环境运行:
1.1启动elasticsearch-6.3.1:
cd elasticsearch-6.3.1
./bin/elasticsearch
./bin/elasticsearch是前台启动,如果想后台启动可以使用-d参数: ./bin/elasticsearch -d
1.2.验证Elasticsearch已经启动:
在浏览器上直接访问http://localhost:9200/ 或者命令行访问
curl http://localhost:9200/?pretty
1.3.验证ik分词器已经启动:
curl -XGET -H 'Content-Type: application/json' 'http://localhost:9200/_analyze?pretty' -d '{
"analyzer" : "ik_max_word",
"text": "中华人民共和国国歌"
}'
2.1启动kibana6.3.1:
cd kibana-6.3.1-darwin-x86_64
./bin/kibana
2.2.验证Elasticsearch已经启动:
在浏览器上直接访问 http://localhost:5601
3.1.启动logstash6.3.1:
cd logstash-6.3.1
./bin/logstash -e 'input { stdin { } } output { stdout {} }'
3.2.验证logstash6.3.1已经启动:
出现成功提示表明logstash6.3.1已经成功启动
三、logstash 实现mysql数据库数据同步:
1.进入logstash-6.3.1文件夹:
cd logstash-6.3.1
2.创建sqlconfig.conf文件:
vim sqlconfig.conf
3.sqlconfig.conf文件内容如下:
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:3306/test" # localhost:3001表示数据库地址和端口,test表示数据库名称
jdbc_user => "root" # 数据库用户名
jdbc_password => "root" # 数据库密码
jdbc_driver_library => "D:/software/logstash-6.2.2/logstash-6.2.2/mysql/mysql-connector-java-5.1.47-bin.jar" # mysql-connector-java-5.1.47-bin.jar绝对路径
jdbc_driver_class => "com.mysql.jdbc.Driver"
statement => "select id_,content_,star_ from note_abstract" # sql查询语句
schedule => "* * * * *" #定时器,每分钟更新一次
type => "user" # 与output的type对应,可以设置多张表
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
if[type] == "user" {
elasticsearch {
hosts => ["localhost:9200"]
index => "index_note" # 索引名称
document_id => "%{id_}" # ID编号
}
}
stdout {
codec => json_lines
}
}
4.保存文件后,再次运行logstash,这次指定加载文件为sqlconfig.conf
./bin/logstash -f sqlconfig.conf
出现成功提示表明加载sqlconfig.conf文件成功
5.验证logstash 实现mysql数据库数据成功同步:
curl -H "Content-Type: application/json" -XPOST 'localhost:9200/index_note/_search?pretty' -d '
{
"query": { "match_all": {} }
}'
又返回内容表示数据成功同步
此时kibana控制台已经有index_note索引
四、flask框架使用es搜索引擎进行查询:
1.安装依赖:
pip install elasticsearch==6.3.1
pip install elasticsearch-dsl==6.3.1
2.使用搜索引擎代码示例如下:
from elasticsearch import Elasticsearch
es = Elasticsearch()
@app.route("/")
def search():
content_ = web_helper.get_param('content_') #搜索内容
body = {
"query": {
"match": {
"content_": content_ # 匹配字段
}
}
}
res = es.search(index='index_note', body=body) # 索引名称
return web_helper.return_msg(1, '成功', res['hits']['hits'])