当前位置:   article > 正文

SpringCloud保姆级搭建教程六---ElasticSearch_spingcloud配置 es

spingcloud配置 es

es下载地址:https://www.elastic.co/cn/downloads/elasticsearch 最新版本

或者 https://github.com/elastic/elasticsearch 7.17.9

kibana下载地址:https://github.com/elastic/kibana 各个版本

jdk8 对应的es应该是7.*版本,最新的es应该对应的至少得17及以上了

===========================================

es7.17.3版本下载:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-3

kibana最好和es版本相同。

https://www.elastic.co/cn/downloads/past-releases/kibana-7-17-3

版本对应关系参考官网:https://www.elastic.co/cn/support/matrix#matrix_compatibility

因为我电脑上装的还是8,所以下载的还是7.17.3这个版本。

===============================================

1、下载好之后,解压压缩包放到你指定的文件夹下,打开这个路径,双击elasticsearch.bat

双击之后就出现一个黑窗口,等它运行完之后,在浏览器输入localhost:9200,

出现这个界面,就是成功启动了。

2、下载好kibana之后,同样的,解压,然后打开文件夹的这个路径,双击kibana.bat

同样的,等他运行完,在浏览器输入localhost:5601,出现界面之后就是启动成功了。

3、此时此刻,kibana就默认连接上了localhost:9200的ElasticSearch(下面用es代替

除此之外,es之后的使用可能还需要安装分词器,这个windows上安装分词器也是相当的坎坷,客官继续往下看。

这里就不演示坑了,直接说怎么正确的配置

首先第一步,下载与es版本相同的ik分词器 这里下载的是 7.17.3

https://gitcode.net/mirrors/medcl/elasticsearch-analysis-ik/-/releases?after=eyJpZCI6IjU4NDAwNSIsInJlbGVhc2VkX2F0IjoiMjAyMi0wNi0zMCAyMDo0Njo1Ny4wMDAwMDAwMDAgQ1NUIn0

下载完之后解压是这个样子的:

此时此刻,它是不能直接用的,需要编译打包才可以,我这里是用idea打开的,因为我用mvn命令失败了,应该是我没配置的原因。

打开idea,open这个ik分词器的项目,这里要注意一个坑,先打开pom.xml文件,修改一个版本号,这里虽然下载的7.17.3版本的ik分词器,但是在pom.xml中有一个es的版本号并不是这个,如果这里不改,后面仍旧会报错。

将这里的7.16.0修改成7.17.3。

然后依次执行这三个命令:

然后我们就得到了一个target文件夹

进入target文件夹下的releases文件夹,有一个zip后缀的压缩包,将其解压,得到一些文件。

这些才是我们要用的。

然后要做的就是,在es的这个目录下创建的一个名叫ik的空文件夹

然后,将刚才咱们得到的那一堆文件复制过来。

这样就算是大功告成了。

然后重启es,重启kibana ,然后测试一下。

创建这个索引,并指定了ik分词器,提示成功。

然后就可以写DSL语句进行对es进行操作了。

4、DSL语法属于单独一节课了哈,大家可以自行百度学习一下,或者看我的这篇文章,里面也说了DSL的语法。https://blog.csdn.net/weixin_65549694/article/details/125686075

5、下面就是怎么在java中使用了,本文章用Spingboot进行演示。

第一步:引入依赖:.

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  4. </dependency>

第二步:写配置文件,便于使用,在application.yml中写es的ip和端口号

第三步:写配置类,这里用了application.yml中的配置,所以会有一个警告,可以引入一个依赖,去除掉这个警告:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-configuration-processor</artifactId>
  4. <version>2.4.5</version>
  5. <!--不传递依赖-->
  6. <optional>true</optional>
  7. </dependency>
  1. package com.brave.config;
  2. import org.apache.http.HttpHost;
  3. import org.elasticsearch.client.RestClient;
  4. import org.elasticsearch.client.RestClientBuilder;
  5. import org.elasticsearch.client.RestHighLevelClient;
  6. import org.springframework.boot.context.properties.ConfigurationProperties;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. @Configuration
  10. @ConfigurationProperties(prefix="elasticsearch")
  11. public class ElasticSearchConfig {
  12. private String host;
  13. private int port;
  14. public String getHost() {
  15. return host;
  16. }
  17. public void setHost(String host) {
  18. this.host = host;
  19. }
  20. public int getPort() {
  21. return port;
  22. }
  23. public void setPort(int port) {
  24. this.port = port;
  25. }
  26. @Bean
  27. public RestHighLevelClient restHighLevelClient(){
  28. RestClientBuilder builder = RestClient.builder(new HttpHost(host, port, "http"));
  29. builder.setRequestConfigCallback(requestConfigBuilder ->{
  30. requestConfigBuilder.setConnectionRequestTimeout(500000);
  31. requestConfigBuilder.setSocketTimeout(500000);
  32. requestConfigBuilder.setConnectTimeout(500000);
  33. return requestConfigBuilder;
  34. });
  35. return new RestHighLevelClient(builder);
  36. }
  37. }

第四步:可以开始写代码测试了。

我在测试类中进行一系列测试:

  1. package com.brave.test;
  2. //import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
  3. import org.bouncycastle.cert.ocsp.Req;
  4. import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
  5. import org.elasticsearch.action.delete.DeleteRequest;
  6. import org.elasticsearch.action.delete.DeleteResponse;
  7. import org.elasticsearch.action.get.GetRequest;
  8. import org.elasticsearch.action.get.GetResponse;
  9. import org.elasticsearch.action.index.IndexRequest;
  10. import org.elasticsearch.action.index.IndexResponse;
  11. import org.elasticsearch.action.search.SearchRequest;
  12. import org.elasticsearch.action.search.SearchResponse;
  13. import org.elasticsearch.action.support.master.AcknowledgedResponse;
  14. import org.elasticsearch.client.indices.CreateIndexRequest;
  15. import org.elasticsearch.client.RequestOptions;
  16. import org.elasticsearch.client.RestHighLevelClient;
  17. import org.elasticsearch.client.indices.CreateIndexResponse;
  18. import org.elasticsearch.client.indices.GetIndexRequest;
  19. import org.elasticsearch.common.xcontent.XContentType;
  20. import org.elasticsearch.index.query.QueryBuilder;
  21. import org.elasticsearch.index.query.QueryBuilders;
  22. import org.elasticsearch.search.SearchHit;
  23. import org.elasticsearch.search.SearchHits;
  24. import org.elasticsearch.search.builder.SearchSourceBuilder;
  25. import org.junit.Test;
  26. import org.junit.runner.RunWith;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.beans.factory.annotation.Qualifier;
  29. import org.springframework.boot.test.context.SpringBootTest;
  30. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  31. import java.io.IOException;
  32. import java.util.HashMap;
  33. import java.util.Map;
  34. /**
  35. * @author 泛筱荻
  36. * @version 1.0
  37. * @date 2023/2/16 13:47
  38. */
  39. @SpringBootTest
  40. @RunWith(SpringJUnit4ClassRunner.class)
  41. public class EsTest {
  42. @Autowired
  43. private RestHighLevelClient restHighLevelClient;
  44. /**
  45. * 创建索引
  46. * @throws IOException
  47. */
  48. @Test
  49. public void test1() throws IOException {
  50. CreateIndexRequest request = new CreateIndexRequest("bravejava1");
  51. //可以直接做表结构的创建,这里就在kibana中写好语句直接复制mapping后面的语句就好了 || 也可以只创建一个索引
  52. String info= "{\n" +
  53. " \"properties\": {\n" +
  54. " \"content\": {\n" +
  55. " \"type\": \"text\",\n" +
  56. " \"analyzer\": \"ik_max_word\",\n" +
  57. " \"search_analyzer\": \"ik_max_word\"\n" +
  58. " }\n" +
  59. " }\n" +
  60. " }";
  61. request.mapping(info,XContentType.JSON);
  62. CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
  63. System.out.println(createIndexResponse.isAcknowledged());
  64. }
  65. /**
  66. * 删除索引
  67. * @throws IOException
  68. */
  69. @Test
  70. public void test2() throws IOException {
  71. DeleteIndexRequest request = new DeleteIndexRequest("bravejava");
  72. AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
  73. System.out.println(delete.isAcknowledged());
  74. }
  75. /**
  76. * 判断索引是否存在
  77. * @throws IOException
  78. */
  79. @Test
  80. public void test3() throws IOException {
  81. GetIndexRequest request = new GetIndexRequest("bravejava");
  82. boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
  83. System.out.println(exists);
  84. }
  85. /**
  86. * 新增文档 指定索引,如果索引不存在会自动创建索引
  87. * @throws IOException
  88. */
  89. @Test
  90. public void test4() throws IOException {
  91. IndexRequest request = new IndexRequest("bravejava");
  92. //用map做数据源
  93. Map<String, Object> map=new HashMap<>();
  94. map.put("name","李四");
  95. map.put("age",20);
  96. map.put("address","北京昌平");
  97. // 如果想用对象做数据源,可以这样
  98. // person.setId("2");
  99. // person.setName("李四");
  100. // person.setAge(30);
  101. // person.setAddress("北京北五环");
  102. // String source = JSON.toJSONString(person);
  103. // request.id("2").source(source,XContentType.JSON);
  104. request.id("2").source(map);
  105. IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);
  106. System.out.println(index.status());
  107. }
  108. /**
  109. * 根据id查询文档
  110. * @throws IOException
  111. */
  112. @Test
  113. public void test5() throws IOException {
  114. GetRequest request = new GetRequest("bravejava","1");
  115. GetResponse getResponse = restHighLevelClient.get(request, RequestOptions.DEFAULT);
  116. Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
  117. System.out.println(sourceAsMap.get("name"));
  118. System.out.println(sourceAsMap.get("age"));
  119. System.out.println(sourceAsMap.get("address"));
  120. // 如果想把map结果传承对应的对象可以这样
  121. // Person person = JSONObject.parseObject(JSONObject.toJSONString(source), Person.class);
  122. }
  123. /**
  124. * 根据id删除文档
  125. * @throws IOException
  126. */
  127. @Test
  128. public void test6() throws IOException {
  129. DeleteRequest request = new DeleteRequest("bravejava","2");
  130. DeleteResponse delete = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
  131. System.out.println(delete.status());
  132. }
  133. /**
  134. * 查询操作 查询操作是最复杂的,其中包括布尔查询,聚合查询,范围查询等等等等。就不一一列举了,具体情况具体再查吧
  135. * @throws IOException
  136. */
  137. @Test
  138. public void test7() throws IOException {
  139. SearchRequest request = new SearchRequest("bravejava");
  140. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  141. //这里分页是从0开始的,如果不写,es也会默认分页,也是十条
  142. searchSourceBuilder.from(0);
  143. searchSourceBuilder.size(10);
  144. request.source(searchSourceBuilder);
  145. SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);
  146. SearchHits hits = search.getHits();
  147. SearchHit[] hits1 = hits.getHits();
  148. for (SearchHit documentFields : hits1) {
  149. Map<String, Object> sourceAsMap = documentFields.getSourceAsMap();
  150. //然后做之后的操作,比如转成对象啊,或者做什么别的操作
  151. System.out.println(sourceAsMap.get("name"));
  152. System.out.println(sourceAsMap.get("age"));
  153. System.out.println(sourceAsMap.get("address"));
  154. }
  155. System.out.println(search.status());
  156. }
  157. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/718132
推荐阅读
相关标签
  

闽ICP备14008679号