1.使用elasticsearch高级客户端api

官网api

Java High Level REST Client | Java REST Client [7.15] | Elastic

2.本人用的elasticsearch版本就是7.14,使用api版本是7.15.2 ,使用es版本对应版本或者高一点版本没问题 以免造成不必要麻烦

3.可以边看官网边看这个例子 ,废话不多说,先上依赖上代码

<!--es 高级客户端 包含org.elasticsearch--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.15.2</version></dependency>
<!--es bug导致运行异常,缺少包,优先引入上面的,如果不报错,下面这个不需要引入,--><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.15.2</version></dependency>

其实引入一个

elasticsearch-rest-high-level-client 这个主依赖包含 org.elasticsearch这个依赖,但是本人遇到一个问题,启动项目会报错

Caused by: java.lang.ClassNotFoundException: org.elasticsearch.common.xcontent.DeprecationHandler

导致jar引入不完整导致的,咱们在引入一遍,确保jar的完整

4.解决maven依赖问题,我们就可以搞点测试类玩玩啦

springboot 下面 引入一下测试类吧,或者不用测试类都可以。有的同学项目创建时候不勾选test依赖,可以引入下

  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

(2)其实安装个Maven Dependency Helper这个插件不错,帮你找到你设置镜像查到依赖

简直牛B666

,这里不用版本,默认跟boot版本一致。

4.下一步就是配置啦springboot配置一下 连接es的config类,让spring扫描到,直接上代码啦

package com.example.helloshirodemo.common.es;import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;/*** @author zhang* @version 1.0* @date 2022/1/19 9:26*/
@Configuration
@Slf4j
public class ElasticSearchConfig {public   static  final  RequestOptions COMMON_OPTIONS;
//hostName 代表ip@Value("${elasticsearch.cluster-nodes}")private String hostName;
//因为咱们这个高级客户端rest 是基于http 咱们使用端口9200 ,而9300是tcp@Value("${elasticsearch.port}")private int port;static {// RequestOptions类保存了请求的部分,这些部分应该在同一个应用程序中的许多请求之间共享。// 创建一个singqleton实例,并在所有请求之间共享它。可以设置请求头之类的一些配置RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();// builder.addHeader("Authorization", "Bearer " + TOKEN); //增加需要的请求 头// builder.setHttpAsyncResponseConsumerFactory(//         new HttpAsyncResponseConsumerFactory//                 .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 *1024));COMMON_OPTIONS = builder.build();}//创建ES实例@Beanpublic RestHighLevelClient restHighLevelClient() throws IOException {RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost(hostName, port, "http")));return client;}
}

9200用于外部通讯,基于http协议,程序与es的通信使用9200端口。

9300jar之间就是通过tcp协议通信,遵循tcp协议,es集群中的节点之间也通过9300端口进行通信。

5.配置完毕,就可以使用啦,操作一下api 吧,创建个测试类

项目结构 要对应

package com.example.helloshirodemo;import com.example.helloshirodemo.common.es.ElasticSearchConfig;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.AdapterActionFuture;
import org.elasticsearch.client.Cancellable;
import org.elasticsearch.client.ElasticsearchClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.MainResponse;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.core.TimeValue;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import javax.naming.directory.SearchResult;
import java.io.IOException;
import java.net.ConnectException;
import java.util.Date;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;/*** @author zhang* @version 1.0* @date 2022/1/19 10:04*/
@SpringBootTest
public class Test1 {@Autowiredprivate RestHighLevelClient restHighLevelClient;/*创建索引 插入文档*/@Testpublic void test001() throws IOException {IndexRequest indexRequest = new IndexRequest("indexrequest");indexRequest.id(UUID.randomUUID().toString().replaceAll("-",""));String jsonString = "{" +"\"user\":\"kimchy\"," +"\"postDate\":\"2013-01-30\"," +"\"message\":\"trying out Elasticsearch\"" +"}";indexRequest.source(jsonString, XContentType.JSON);IndexResponse index = restHighLevelClient.index(indexRequest, ElasticSearchConfig.COMMON_OPTIONS);DocWriteResponse.Result result = index.getResult();if(DocWriteResponse.Result.CREATED.equals(index.getResult())){System.out.println("创建索引 插入文档完毕!!");}}/*获取指定索引下的 id 文档*/@Testpublic void test002() throws IOException {GetRequest getRequest = new GetRequest("indexrequest");getRequest.id("0e8e3045e7da4c07a66cf36fb0725835");GetResponse documentFields = restHighLevelClient.get(getRequest, ElasticSearchConfig.COMMON_OPTIONS);Map<String, Object> source = documentFields.getSource();System.out.println(source);}@Testpublic void test003() throws IOException {try {if(restHighLevelClient.ping(ElasticSearchConfig.COMMON_OPTIONS)){System.out.println("链接成功es");}}catch (Exception e){if(e instanceof ElasticsearchException){System.out.println("ConnectException链接失败");}}}/*模糊查询*/@Testpublic void test004() throws IOException {//创建搜索请求。如果没有参数,这将对所有索引运行。SearchRequest searchRequest = new SearchRequest("t_blog");//大多数搜索参数都添加到SearchSourceBuilder中。它为进入搜索请求主体的所有内容提供了setter。SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("title", "标题2");matchQueryBuilder.fuzziness(Fuzziness.AUTO); //开启模糊性查询matchQueryBuilder.prefixLength(3); //模糊前缀matchQueryBuilder.maxExpansions(10); //设置最大扩展选项
//        searchSourceBuilder.query(QueryBuilders.matchQuery("text","标题2"));searchSourceBuilder.query(matchQueryBuilder);searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));searchRequest.source(searchSourceBuilder);SearchResponse search = restHighLevelClient.search(searchRequest, ElasticSearchConfig.COMMON_OPTIONS);SearchHit[] hits = search.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit);}}/*高亮查询*/@Testpublic void heihtQueryTest01() throws IOException {//指定搜素请求信息SearchRequest searchRequest = new SearchRequest("t_blog"); //index//创建搜素源生成器SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//匹配MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("title", "标题2");//高亮HighlightBuilder highlightBuilder = new HighlightBuilder();HighlightBuilder.Field highlightTitle = new HighlightBuilder.Field("title");highlightBuilder.preTags("<span style='color:red' >");//设置前缀highlightBuilder.postTags("</span>");//设置后缀highlightBuilder.field(highlightTitle);//设置高亮searchSourceBuilder.highlighter(highlightBuilder);//匹配器设置匹配规则searchSourceBuilder.query(matchQueryBuilder);//设置排序searchSourceBuilder.sort("createTime");//设置分页searchSourceBuilder.from(0); //页吗searchSourceBuilder.size(10);//默认命中10searchRequest.source(searchSourceBuilder);SearchResponse search = restHighLevelClient.search(searchRequest, ElasticSearchConfig.COMMON_OPTIONS);for (SearchHit hit : search.getHits().getHits()) {Map<String, Object> sourceAsMap = hit.getSourceAsMap();System.out.println(sourceAsMap);}}
}

springboot 操作es 之elasticsearch-rest-high-level-client相关推荐

  1. springboot操作ES之ElasticSearch_EasyEs

    springboot操作ES之ElasticSearch_EasyEs 前置环境 es:7.x springboot:2.6.0 easyes:1.0.2 1.导入依赖 <dependency& ...

  2. SpringBoot操作ES进行各种高级查询(值得收藏)

    来源:cnblogs.com/keatsCoder/p/11341835.html SpringBoot整合ES 创建SpringBoot项目,导入 ES 6.2.1 的 RestClient 依赖和 ...

  3. SpringBoot 操作 ES 进行各种高级查询

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  4. SpringBoot操作ES进行各种高级查询

    SpringBoot整合ES 创建SpringBoot项目,导入 ES 6.2.1 的 RestClient 依赖和 ES 依赖.在项目中直接引用 es-starter 的话会报容器初始化异常错误,导 ...

  5. 从ElasticSearch 认识到实战(SpringBoot集成ES)

    ElasticSearch 认识到实战 目录 搜索引擎介绍 ElasticSearch知识 安装 使用restful风格查询ES SpringBoot配置ES SpringBoot集成使用 一.搜索引 ...

  6. Elasticsearch 7.X SpringBoot 使用 ElasticsearchRestTemplate 操作 ES

    一.ElasticsearchRestTemplate 前面学习了es rest接口对es进行操作的方式,并且还学习了es的分片及扩容,有讲解了几种常见的分词器,喜欢的小伙伴可以看下本专栏的其他文章, ...

  7. 【ElasticSearch】(四)—— RestClient操作ES

    目录 ​编辑 一.RestClient操作索引 环境搭建 1.导入数据 2.导入项目 3.mapping映射分析 4.初始化RestClient 1)创建索引库 1.代码解读 2.完整示例 2)删除索 ...

  8. ElasticSearch - SpringBoot集成ES

    文章目录 ElasticSearch - SpringBoot集成ES 1.整体设计思路(仿NBA中国官网) 2.项目搭建 3.ES API的基本使用 3.1 新增球员信息 3.2 查看球员信息 3. ...

  9. SpringBoot 操作 ElasticSearch 详解(万字长文)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:超级小豆丁 http://www.mydlq.club/ar ...

  10. SpringBoot高级-检索-SpringBoot整合Jest操作ES

    接下来就用SpringBoot来整合ElasticSearch进行测试,pom文件引入了spring-boot-starter-data-elasticsearch,其实加了data都是用spring ...

最新文章

  1. C#常量——const和readonly
  2. http协议、模块、express框架以及路由器、中间件和mysql模块
  3. 洛谷P1402 酒店之王(二分图)
  4. 时间序列预测方法汇总:从理论到实践(附Kaggle经典比赛方案)
  5. Greg and Array CodeForces - 296C(差分数组+线段树)
  6. .NET 社区 NB,2019 中国 .NET 开发者峰会
  7. Jquery中如何获取元素的文本,值,属性和内容
  8. php datediff 函数,dateAdd与DateDiff函数的js代码
  9. Linux下 RPM 包和Deb包的安装(代码指令+案列)
  10. C# 添加,修改,删除Xml节点
  11. 尴尬!微软的 PowerShell 竟是 Linux 用户最多!| 极客头条
  12. 浅谈三种使用Redis实现MQ的方式
  13. iOS之获取手机DeviceToken,以及苹果测试推送工具Easy APNs Provider
  14. R语言一步到位求数据的均值,频数,标准差,标准误差
  15. 慕课java工程师2020版_中国大学慕课2020Java程序设计答案大全
  16. 香橙派装php_香橙派Orange Pi 3电脑开发板如何安装安卓系统
  17. 每日一课 | SQL模糊查找
  18. MPI: 虚拟拓扑和近邻通信
  19. 计算机巨人的采访对话英文怎么说,采访名人的英语对话
  20. 哈工大软件构造lab3总结

热门文章

  1. 目的地址和ARP地址应答中的源地址
  2. 常见的系统间接口方式(02)-中间件的数据接口模式
  3. linux 实时显示网速工具nload
  4. 防火墙阻止软件联网方法
  5. python里窗口大小的单位_python界面上的图片缩放,根据窗口大小
  6. 抖音高贵气质的签名_抖音签名大全2020最新版-抖音个性签名男生女生-抖音个性签名霸气-腾牛个性网...
  7. 基本矩阵F和本质矩阵E的详细推导
  8. BUCK电路分析(一)
  9. 长城脚下世园会倒计时100天 国际参展方数量史上最多
  10. 真实感水体渲染技术总结