当前位置:   article > 正文

Elasticsearch7.10搜索引擎RestHighLevelClient高级客户端整合Springboot基础教程_sping boot 7.10.2 集成 es

sping boot 7.10.2 集成 es

目录

一. 基本概念介绍

二. Elasticsearch服务端安装

三. Http rest api简单使用介绍

四. 整合到Springboot及使用RestHighLevelClient高级客户端

五. 后续


网络上关于Elasticsearch搜索引擎的教程不少, 但大多数都是比较老旧的, 甚至包括Elasticsearch官网的教程也是很久没有更新, 再加上Elasticsearch本身升级过程中不断的抛弃老旧概念, 新版本完全不兼容旧版本, 所以老旧教程给新入门的童鞋带来很多困惑.

这里使用当前Elasticsearch最新版本7.10.2结合Springboot2.X版本, 使用http rest api接口和RestHighLevelClient高级客户端封装的一些常用接口给新到的童鞋一些参考.

一. 基本概念介绍

本文侧重于讲述Elasticsearch的基本使用, 关于它的特性和基本概念, 您可以通过官网或其他网络文章了解. 这里只指出与本文有关的一些重要概念.

  • index:索引
    在7.0以前的版本中类似于数据库中的database概念, 由于在7.0版本后移除了type(或者或type只能为_doc这一种类型), 现在的index类似于数据库中的表(table).
  • document:文档
    类似于数据库中的一条记录
  • mapping:映射
    类似于数据库中的表结构, es中mapping可以支持动态映射, dynamic属性有true, false, strict 3种类型的值
  • field:字段
    类似于数据库中的column字段, 字段类型后面会介绍

二. Elasticsearch服务端安装

Elasticsearch官网下载相应操作系统最新版本压缩包, 解压即可, 无需任何额外配置. Elasticsearch运行环境依赖java, 必须先配置好java环境.

以Windows为例: 解压至D:\Apps\elasticsearch-7.10.2

启动: 执行bin目录下的.\elasticsearch.bat 即可启动. 默认http端口为9200, tcp端口为9300

启动成功后在浏览器地址栏输入 localhost:9200, 出现以下信息:

从GitHub上下载相同版本号的ik分词器插件: https://github.com/medcl/elasticsearch-analysis-ik, 解压后复制到elasticsearch/plugins目录下, 重启elasticsearch即可生效.

三. Http rest api简单使用介绍

elasticsearch.rest

  1. ### 查看索引 ${index}
  2. GET {
  3. {esClusterNode}}/index_user
  4. Accept: application/json
  5. ### 创建索引 ${index} 指定设置和映射 address字段使用IK分词器分词
  6. ### analyzer和search_analyzer的区别:
  7. ### 在创建索引,指定analyzer,ES在创建时会先检查是否设置了analyzer字段,如果没定义就用ES预设的
  8. ### 在查询时,指定search_analyzer,ES查询时会先检查是否设置了search_analyzer字段,
  9. ### 如果没有设置,还会去检查创建索引时是否指定了analyzer,还是没有还设置才会去使用ES预设的
  10. ### ES分析器主要有两种情况会被使用:
  11. ### 1. 插入文档时,将text类型的字段做分词然后插入倒排索引,此时就可能用到analyzer指定的分词器
  12. ### 2. 在查询时,先对要查询的text类型的输入做分词,再去倒排索引搜索,此时就可能用到search_analyzer指定的分词器
  13. PUT {
  14. {esClusterNode}}/index_user
  15. Content-Type: application/json
  16. {
  17. "settings": {
  18. "number_of_shards": 3,
  19. "number_of_replicas": 2
  20. },
  21. "mappings": {
  22. "properties": {
  23. "id": {
  24. "type": "keyword"
  25. },
  26. "name": {
  27. "type": "keyword"
  28. },
  29. "age": {
  30. "type": "integer"
  31. },
  32. "sex": {
  33. "type": "keyword"
  34. },
  35. "email": {
  36. "type": "keyword"
  37. },
  38. "address": {
  39. "type": "text",
  40. "analyzer": "ik_max_word",
  41. "search_analyzer": "ik_max_word"
  42. }
  43. }
  44. }
  45. }
  46. ### 删除索引 ${index}
  47. DELETE {
  48. {esClusterNode}}/index_user
  49. Content-Type: application/x-www-form-urlencoded
  50. ### 查看映射 ${index}/_mapping
  51. GET {
  52. {esClusterNode}}/index_user/_mapping
  53. Content-Type: application/x-www-form-urlencoded
  54. ### 新增映射 ${index}/_mapping
  55. PUT {
  56. {esClusterNode}}/index_user/_mapping
  57. Content-Type: application/json
  58. {
  59. "properties": {
  60. "score": {
  61. "type": "float"
  62. }
  63. }
  64. }
  65. ### 新增文档 ${index}/_doc 自动生成ID(不推荐) 这里的ID是指es注解_id, 不是自定义的id字段
  66. POST {
  67. {esClusterNode}}/index_user/_doc
  68. Content-Type: application/json
  69. {
  70. "id": "100001",
  71. "name": "张三",
  72. "age": 23,
  73. "sex": "男",
  74. "email": "zhangsan@163.com",
  75. "address": "广东省深圳市龙华新区民治工业园29号"
  76. }
  77. ### 搜索文档 ${index}/_search 查询全部文档
  78. GET {
  79. {esClusterNode}}/index_user/_search
  80. Content-Type: application/json
  81. {
  82. "query": {
  83. "match_all": {}
  84. }
  85. }
  86. ### 查看文档 ${index}/_doc/${_id}
  87. GET {
  88. {esClusterNode}}/index_user/_doc/-MVMlXcBnpDI88FS39oA
  89. Accept: application/json
  90. ### 新增文档 ${index}/_doc/${_id} 指定ID 推荐
  91. POST {
  92. {esClusterNode}}/index_user/_doc/100002
  93. Content-Type: application/json
  94. {
  95. "id": "100002",
  96. "name": "李四",
  97. "age": 45,
  98. "sex": "男",
  99. "email": "lisi@163.com",
  100. "address": "广东省深圳市龙华新区民治工业园27号"
  101. }
  102. ### 查看文档 ${index}/_doc/${_id}
  103. GET {
  104. {esClusterNode}}/index_user/_doc/100002
  105. Accept: application/json
  106. ### 更新文档 ${index}/_doc/${_id} ID不存在则新增
  107. PUT {
  108. {esClusterNode}}/index_user/_doc/100002
  109. Content-Type: application/json
  110. {
  111. "id": "100002",
  112. "name": "李四",
  113. "age": 35,
  114. "sex": "男",
  115. "email": "lisi666@163.com",
  116. "address": "广东省广州市越秀区中心工业园81号"
  117. }
  118. ### 删除文档 ${index}/_doc/${_id}
  119. DELETE {
  120. {esClusterNode}}/index_user/_doc/6WoDdncBA_HwaxaTfHFC
  121. Content-Type: application/json
  122. ### 搜索文档 ${index}/_search 查询全部文档
  123. GET {
  124. {esClusterNode}}/index_user/_search
  125. Content-Type: application/json
  126. {
  127. "query": {
  128. "match_all": {}
  129. }
  130. }
  131. ### 搜索文档 ${index}/_search 查询关键字
  132. GET {
  133. {esClusterNode}}/index_user/_search
  134. Content-Type: application/json
  135. {
  136. "query": {
  137. "match": {
  138. "address": "广东省"
  139. }
  140. }
  141. }
  142. ### 搜索文档 ${index}/_search 查询关键字
  143. GET {
  144. {esClusterNode}}/index_user/_search
  145. Content-Type: application/json
  146. {
  147. "query": {
  148. "match": {
  149. "age": "23"
  150. }
  151. }
  152. }
  153. ### 搜索文档 ${index}/_search 查询关键字 关键字也会被分词 例如, 输入深圳市, 匹配市会按 深圳市 深圳 市 进行搜索
  154. GET {
  155. {esClusterNode}}/index_user/_search
  156. Content-Type: application/json
  157. {
  158. "query": {
  159. "match": {
  160. "address": "深圳市"
  161. }
  162. }
  163. }
  164. ### 搜索文档 ${index}/_search 查询关键字 模糊查找 query match 高亮显示
  165. GET {
  166. {esClusterNode}}/index_user/_search
  167. Content-Type: application/json
  168. {
  169. "query": {
  170. "match": {
  171. "address": "广东省深圳市龙华新区民治工业园"
  172. }
  173. },
  174. "highlight": {
  175. "fields": {
  176. "address": {}
  177. }
  178. }
  179. }
  180. ### 搜索文档 ${index}/_search 查询关键字 精确查找 query term 高亮显示
  181. GET {
  182. {esClusterNode}}/index_user/_search
  183. Content-Type: application/json
  184. {
  185. "query": {
  186. "term": {
  187. "address": "广州"
  188. }
  189. },
  190. "highlight": {
  191. "fields": {
  192. "address": {}
  193. }
  194. }
  195. }
  196. ### 查看分词结果GET /${index}/_doc/${id}/_termvectors?fields=${fields_name}
  197. GET {
  198. {esClusterNode}}/index_user/_doc/100002/_termvectors?fields=address
  199. Accept: application/json

四. 整合到Springboot及使用RestHighLevelClient高级客户端

1. 为Springboot项目pom.xml添加elasticsearch及RestHighLevelClient高级客户端依赖

  1. <dependency>
  2. <groupId>org.elasticsearch.client</groupId>
  3. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  4. <version>${elasticsearch.version}</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.elasticsearch.client</groupId>
  8. <artifactId>elasticsearch-rest-client</artifactId>
  9. <version>${elasticsearch.version}</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.elasticsearch</groupId>
  13. <artifactId>elasticsearch</artifactId>
  14. <version>${elasticsearch.version}</version>
  15. </dependency>

版本均选择7.10.2 这里不推荐使用spring-boot-starter-data-elasticsearch, starter难以控制elasticsearch及其依赖项的版本号.

elasticsearch-rest-high-level-client高级客户端依赖于elasticsearch-rest-client低级客户端, 由于elasticsearch版本间的兼容性非常差, 所以为避免出现一些意向不到的问题, 请保证elasticsearch, elasticsearch-rest-high-level-client, elasticsearch-rest-client, 如果后续需要使用ik分词器, kibana, logstash 使用同一个版本号.

2. 配置RestHighLevelClient高级客户端

  • 添加集群配置文件
    多个集群节点之间以英文逗号 , 分隔, 如 cluster-nodes: localhost:9200,localhost:9201
  1. # es搜索引擎
  2. elasticsearch:
  3. cluster-nodes: localhost:9200
  • RestHighLevelClient实例配置
    elasticsearch已经实现了负载均衡功能, 具体如何实现的, 资料很少.
    ElasticSearchConfig.java
  1. import lombok.extern.slf4j.Slf4j;
  2. import org.apache.http.HttpHost;
  3. import org.elasticsearch.client.RestClient;
  4. import org.elasticsearch.client.RestHighLevelClient;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import java.util.Arrays;
  9. /**
  10. * Elasticsearch配置
  11. *
  12. * @author Aylvn
  13. * @date 2021-02-03
  14. */
  15. @Slf4j
  16. @Configuration
  17. public class ElasticSearchConfig {
  18. @Value("${elasticsearch.cluster-nodes}")
  19. private String clusterNodes;
  20. @Bean
  21. public RestHighLevelC
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/68529
推荐阅读
相关标签
  

闽ICP备14008679号