ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
目前Elasticsearch最新版本为7.2.0,因为Elasticsearch各个版本之间的API并不是完全兼容,一些参数可能在新版本中已经更改或者已经废弃,而官方并不能及时提供对应的文档,所以本次验证都是基于Elasticsearch6.7.0版本。
系统:Windows 10
JDK版本:1.8
下载Elasticsearch6.7.0,解压,然后进入解压目录下的bin目录,直接点击elasticsearch.bat或者命令行运行即可启动elasticsearch。elasticsearch默认端口是9200,在浏览器中输入http://127.0.0.1:9200可以看到该节点的相关信息。
elasticsearch-head
elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。
启动了elasticsearch-head并不能直接连接启动了的elasticsearch服务,需要在elasticsearch的config目录下修改elasticsearch.yml配置文件。
在文件后面加上:
http.cors.enabled: true
http.cors.allow-origin: "*"
重新启动elasticsearch即可在elasticsearch-head中查看到刚刚启动的elasticsearch服务。
创建索引和type:
在postman中发送http请求来新建。
URL:http://127.0.0.1:9210/user
方法:PUT
请求体:
{
"settings": {
"number_of_replicas": 0,
"number_of_shards": 5
},
"mappings":{
"car":{
"properties": {
"carId":{
"type" : "integer"
},
"name":{
"type" : "keyword"
},
"firm":{
"type" : "keyword"
},
"structure" :{
"type" : "keyword"
},
"energy" : {
"type" : "keyword"
},
"tags": {
"type" : "text"
},
"image":{
"type" : "keyword"
},
"price" :{
"type" : "double"
},
"suggest": {
"type": "completion"
}
}
}
}
}
即可新建user索引,car为type,以及一些type对应的字段。
匹配查询有query和filter两种,query查询在查询结果中会有_score(得分,可以理解为查询的匹配度),查询结果按照_score结果降序排列。filter不会去计算查询结果的_score,所以filter的效率比query更高。
match查询和term查询,match查询会将查询的关键词进行分词,但是term不会对查询关键词分词。
Bool查询:
Bool查询可以提供组合查询的方式,包括must/should/must_not分别等同于and/or/not。
。。。等等灵活多变的查询方式
采用的方案是用logstash的logstash-input-jdbc插件来实现mysql和Elasticsearch的数据同步。
需要下载logstash6.7.0,logstash版本需要与Elasticsearch版本号对应。
在bin目录下新建logstash.conf,内容如下:
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://10.1.1.100:3306/everams_db"
jdbc_user => "root"
jdbc_password => "root"
jdbc_driver_library => "E:/repository/mysql/mysql-connector-java/5.1.46/mysql-connector-java-5.1.46.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
statement_filepath => "D:/tools/es/sync.sql"
}
}
output {
#设置窗口日志输出
stdout {
codec => json_lines
}
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "managers"
document_type => "core_managers"
}
}
Input表示数据源,数据源为jdbc,需要配置好mysql中表的地址,用户名,密码,mysql-connector-java的jar包位置以及sql文件的位置。
Output中stdout 表示控制台输出,elasticsearch 表示输出到elasticsearch 服务中,需要提前在elasticsearch 中建好索引,type可以不建。
让logstash以logstash.conf的方式启动,可以写个run.bat封装好对应的命令:
logstash.bat -f logstash.conf
将一张含有10182582条数据的表同步到elasticsearch中。
Mysql模糊查询:
Elasticsearch query查询:
Elasticsearch filter查询:
Elasticsearch fuzzy查询:
通过模糊查询对比,查到的数据量都是131509条,时间上却有很大的差异。