springboot+elasticsearch+kibana整合本地搭建环境
springboot+elasticsearch+kibana整合本地搭建环境
准备
下载软件
elasticsearch-5.5.1
kibana-5.5.1
elasticsearch-analysis-ik-5.5.1
springboot 2.0.4.RELEASE
注意
版本必须是对应上的
1.下面是Springboot,Spring Data Elasticsearch,Elasticsearch的版本对应
2.elasticsearch ,kibana ,elasticsearch-analysis-ik 必须版本一致
安装 elasticsearch kibana
1.解压elasticsearch , kibana 到 D:\ELK目录
2.修改配置文件
** elasticsearch** :D:\ELK\elasticsearch-5.5.1\config\elasticsearch.yml
//主机地址
network.host: 192.168.63.248
#network.hostbind_host: 192.168.63.248
#network.publish_host: 192.168.63.248
//http的端口
http.port: 9200
//服务通信的端口
transport.tcp.port: 9300
//集群名称
cluster.name: es_cluster_lmq
//节点名称
node.name: node-lmq-1
** kibana** : D:\ELK\kibana-5.5.1-windows-x86\config\kibana.yml
//端口
server.port: 5601
//主机地址
server.host: "192.168.63.248"
//es的http的地址
elasticsearch.url: "http://192.168.63.248:9200/"
- 启动
启动es:D:\ELK\elasticsearch-5.5.1\bin\elasticsearch.bat,完成后 打开es的http地址,就能看到es一下信息,集群名,版本等 http://192.168.63.248:9200/
再启动 kibana,es没启动,直接启动kibana会报错 http://192.168.63.248:5601
这样就算是 es和kibana搭建成功了
中文分词查询
es的默认分词器
首先说个例子
我要查询数据中 shortTitle包含 “旗舰店” 的数据,
1.那我就用模糊查询 wildcard , “shortTitle”:“旗舰店” 通配符查询,查询没有数据 图1
2.那我换个方式: “shortTitle.keyword”:"*旗舰店" ,就有数据了
这个原因是因为 shopTitle 是text的类型 是走分词,倒排索引的, shopTitle.keyword的类型需要全字段的精确匹配,
全文匹配不用说了, 字符串:“官网旗舰店” 用通配符查询,肯定是查询到数据的
text的类型的话,是会分词,查询的时候就检索分词后的每个词条,es的默认分词 是分成一个一个词,作为索引,这样的话,我拿 “旗舰店” 去匹配查询 一个一个词 肯定是查不到的
ik中文分词器
上面准备工作已经下载下来了
引入到es
1.D:\ELK\elasticsearch-5.5.1\plugins 新建文件夹 ik
2.解压ik,把文件复制到 ik文件夹下面
重启es
控制台能看到 已加载了 ik了
ik分词器提供了两个模式的分词 ik_max_word(会将文本做最细粒度的拆分) ik_smart (会做最粗粒度的拆分) 分别看下分词效果 看到分词效果好很多了
再来模糊查询看看 ,因为我配置的 title字段是根据ik中文分词器,这样就能 根据分词后的 字条“旗舰店” 查询到了
有了中文分词的话 ,我们用的查询就用 match ,match 是先把查询的字符串进行分词(要自定义映射文件),然后再去查询分词索引的, 例如 是查询 “官网旗舰店” 分词后是 官, 网, 旗舰店,这样就能查询到,这些数据
,,只要包含了就能查询出来,
那我想查询 包含 网, 旗舰店,的数据呢,“operator”: “and” 就行了 就只会有一条数据
也可以查询看下一条数据单个字段的分词情况
get /ricer_shop_tbk_item/ricer_shop_tbk_item/580332176701/_termvectors?fields=shortTitle
get /indexName/indexType/数据的主键ID/_termvectors?fields=需要查询字段的 可以看到就是一个词一个词分的
get /ricer_shop_tbk_item/ricer_shop_tbk_item/580332176701/_termvectors?fields=title
title是配置了ik中文分词的 这样看来分词效果还不错
springboot+elasticsearch整合
引入jar包
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
配置es服务地址 这里用的就是 9300 端口
data:
elasticsearch:
cluster-name: es_cluster_lmq
cluster-nodes: 192.168.63.248:9300
创建索引 通过注解配置