当前位置: 首页 > news >正文

JAVA 集成 ElasticSearch

目录

ElasticSearch Client

Java REST Client

Dependencies

Initialization

RequestOptions

 测试


ElasticSearch Client

9300端口 :TCP协议,性能较高,ES集群内部节点之间通过9300进行通讯。

  • Java Transport Client (7.x 已废弃)
  • Spring Data Elasticsearch

9200端口:HTTP协议,通过http请求和ES进行交互。跨语言兼容性好,易于调试。

  • Java REST Client (8.x 已废弃)
  • Java Client (active)
  • 其他HttpClient,模拟发送http请求

Java REST Client

谷粒商城 ES 7.4.2 仅支持 Java REST Client ,之后若有需要 再进行重构

Dependencies

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.4.2</version>
</dependency>

由于spring-boot-dependencies中<elasticsearch.version>有默认值,为避免冲突,应手动指定版本

 <properties><java.version>1.8</java.version><spring-cloud.version>Greenwich.SR3</spring-cloud.version><elasticsearch.version>7.4.2</elasticsearch.version></properties>

Initialization

  • 给容器中注入一个 RestHighLevelClient 
@Configuration
public class GulimallElasticSearchConfig {@Value("${search.host.address}")private String hostName;@Beanpublic RestHighLevelClient esRestClient() {RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost(hostName, 9200, "http")));return client;}
}

GulimallSearchApplicationTests中注入的RestHighLevelClient NotNull即可

RequestOptions

RequestOptions 主要用于:

  • 共享配置:在多个请求之间共享相同的配置(如认证信息、超时设置等)。

  • 简化代码:避免在每个请求中重复设置相同的参数。

  • 提高性能:通过复用配置,减少不必要的对象创建和内存开销。

private static final RequestOptions COMMON_OPTIONS;
static {RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();builder.addHeader("Authorization", "Bearer " + TOKEN); builder.setHttpAsyncResponseConsumerFactory(           new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));COMMON_OPTIONS = builder.build();
}

 测试

  • Index API

source 可以以4种方式提供,即 Json字符串,map,XContentBuilder 或 键值对

    @Autowiredprivate RestHighLevelClient esRestClient;@Testpublic void indexApi() throws IOException {//索引名IndexRequest request = new IndexRequest("user");request.id("1");User user=new User();user.setName("asuka");user.setAge("18");user.setGender("女");String userJson= JSON.toJSONString(user);request.source(userJson, XContentType.JSON);//同步请求IndexResponse indexResponse = esRestClient.index(request, GulimallElasticSearchConfig.COMMON_OPTIONS);System.out.println(indexResponse);}@Dataclass User{private String name;private String age;private String gender;}
  • Search API

 SearchSourceBuilder:DSL根操作,如query,aggregations,from,size等 

    @Autowiredprivate RestHighLevelClient esRestClient;@Testpublic void searchApi() throws IOException {SearchRequest searchRequest = new SearchRequest("my_bank");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));searchSourceBuilder.size(5);//求平均薪资AggregationBuilder avgBalance= AggregationBuilders.avg("avgBalance").field("balance");searchSourceBuilder.aggregation(avgBalance);//依据年龄分组AggregationBuilder byAgeAggregationBuilder= AggregationBuilders.terms("by_age").field("age");searchSourceBuilder.aggregation(byAgeAggregationBuilder);searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = esRestClient.search(searchRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);System.out.println(searchResponse);SearchHits hits= searchResponse.getHits();for (SearchHit hit : hits.getHits()) {System.out.println(hit);//也可通过JSON.parseObject() 转换为 对象}//获取聚合信息Aggregations aggregations = searchResponse.getAggregations();//依据名字取出各聚合Avg balanceAvg = aggregations.get("avgBalance");System.out.println("平均薪资: " + balanceAvg.getValue());Terms byAgeAggregation = aggregations.get("by_age");for (Terms.Bucket bucket: byAgeAggregation.getBuckets()) {System.out.println("年龄 :" +bucket.getKey()+ " 数量:"+ bucket.getDocCount());}}

相关文章:

JAVA 集成 ElasticSearch

目录 ElasticSearch Client Java REST Client Dependencies Initialization RequestOptions 测试 ElasticSearch Client 9300端口 &#xff1a;TCP协议&#xff0c;性能较高&#xff0c;ES集群内部节点之间通过9300进行通讯。 Java Transport Client &#xff08;7.x 已废…...

AMBA-CHI协议详解(十九)

文章目录 4.6 Silent cache state transitions4.7 Cache state transitions at a Requester4.7.1 Read request transactions4.7.2 Dataless request transactions4.7.3 Write request transactions4.7.4 Atomic transactions4.7.5 Other request transactions 4.6 Silent cach…...

如何把windows机器作为SSH客户端免密登录

要在Windows机器上配置免密SSH登录&#xff0c;你需要生成一个SSH密钥对&#xff0c;并将公钥添加到你要登录的服务器的~/.ssh/authorized_keys文件中。以下是具体步骤&#xff1a; 在Windows上生成SSH密钥对 打开PowerShell或命令提示符&#xff1a; 你可以通过搜索栏输入“P…...

sklearn中的决策树-分类树:重要参数

分类树 sklearn.tree.DecisionTreeClassifier sklearn.tree.DecisionTreeClassifier (criterion’gini’ # 不纯度计算方法, splitter’best’ # best & random, max_depthNone # 树最大深度, min_samples_split2 # 当前节点可划分最少样本数, min_samples_leaf1 # 子节点最…...

25林业研究生复试面试问题汇总 林业专业知识问题很全! 林业复试全流程攻略 林业考研复试真题汇总

25 林业考研复试&#xff0c;专业面试咋准备&#xff1f;学姐来支招&#xff01; 宝子们&#xff0c;一提到林业考研复试面试&#xff0c;是不是就慌得不行&#xff0c;感觉老师会扔出一堆超难的问题&#xff1f;别怕别怕&#xff0c;其实林业考研复试就那么些套路&#xff0c;…...

DeepSeek最新开源动态:核心技术公布

2月21日午间&#xff0c;DeepSeek在社交平台X发文称&#xff0c;从下周开始&#xff0c;他们将开源5个代码库&#xff0c;以完全透明的方式与全球开发者社区分享他们的研究进展。并将这一计划定义为“Open Source Week”。 DeepSeek表示&#xff0c;即将开源的代码库是他们在线…...

Electron通过ffi-napi调用dll导出接口

electron使用ffi-napi环境搭建 附打包好的ffi-napi可以直接放到项目目录下使用&#xff0c;避免以后麻烦 一、安装node.js Node.js官网&#xff1a;https://nodejs.org/zh-cn/download&#xff0c;选择LTS长期稳定版本即可 需要注意Node.js 区分32和64位&#xff0c;32位版…...

【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】

文章目录 六大比较类排序算法&#xff08;插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序&#xff09;前言1. 插入排序算法描述代码示例算法分析 2. 选择排序算法描述优化代码示例算法分析 3. 冒泡排序算法描述代码示例算法分析与插入排序对比 4. 希尔排序算法描…...

计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+LW文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

【Java学习】抽象类与接口

面向对象系列四 一、抽象方法 二、抽象类 三、意义检查 1.抽象方法的意义 2.意义检查 体现 四、接口 1.级别层次 2.接口变量 3.意义 4.成员 成员变量&#xff1a; 成员方法&#xff1a; 一、抽象方法 没有方法体即没有任何实现的方法是抽象方法&#xff0c;只有在…...

SpringBoot中实现限流和熔断功能

我们将使用Java的ScheduledExecutorService来实现一个简单的令牌桶算法(Token Bucket Algorithm),并结合一个自定义的服务类来处理第三方API调用。 1. 创建限流器 首先,创建一个简单的限流器类: import java.util.concurrent.*;public class SimpleRateLimiter {...

61.旋转链表--字节跳动

你应该比你现在强得多 题目描述 给定单链表&#xff0c;要求返回向右移动K位后的新链表 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]思路分析 计算链表的长度 计算实际需要移动的步数 找到新的头节点 断开链表并重新连接 完整代码 /*** Defini…...

verilog笔记

Verilog学习笔记&#xff08;一&#xff09;入门和基础语法BY电棍233 由于某些不可抗拒的因素和各种的特殊原因&#xff0c;主要是因为我是微电子专业的&#xff0c;我需要去学习一门名为verilog的硬件解释语言&#xff0c;由于我是在某西部地区的神秘大学上学&#xff0c;这所…...

c++中sleep是什么意思(不是Sleep() )

sleep 函数在 C 语言中用于暂停程序执行指定的秒数&#xff0c;语法为 sleep(unsigned int seconds)。当 seconds 为 0 时&#xff0c;函数立即返回&#xff0c;否则函数将使进程暂停指定的秒数&#xff0c;并返回实际暂停的时间。 sleep 函数在 C 中的含义 sleep 函数是 C 标…...

Uniapp 开发中遇到的坑与注意事项:全面指南

文章目录 1. 引言Uniapp 简介开发中的常见问题本文的目标与结构 2. 环境配置与项目初始化环境配置问题解决方案 项目初始化注意事项解决方案 常见错误与解决方案 3. 页面与组件开发页面生命周期注意事项示例代码 组件通信与复用注意事项示例代码 样式与布局问题注意事项示例代码…...

Dify安装教程:Linux系统本地化安装部署Dify详细教程

1. 本地部署 Dify 应用开发平台 环境:Ubuntu(24.10) docker-ce docker compose 安装 克隆 Dify 源代码至本地环境: git clone https://github.com/langgenius/dify.git 启动 Dify: cd dify/docker cp .env.example...

rtsp rtmp 跟 http 区别

SDP 一SDP介绍 1. SDP的核心功能 会话描述&#xff1a;定义会话的名称、创建者、时间范围、连接地址等全局信息。媒体协商&#xff1a;明确媒体流的类型&#xff08;如音频、视频&#xff09;、传输协议&#xff08;如RTP/UDP&#xff09;、编码格式&#xff08;如H.264、Op…...

基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

物体识别系统(识别图片中的物体)

这是一个基于 PyTorch 和 PyQt5 的物体识别程序&#xff0c;使用 Faster R-CNN 模型来识别图片中的物体&#xff0c;并通过图形界面展示识别结果。 1.用户界面 主窗口&#xff1a;包含加载图片、识别、清除按钮&#xff0c;以及图片显示区域和结果展示区域。 图片显示&#…...

数据表的存储过程和函数介绍

文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述 存储过程和函数是在数据库中定义的一些SQL语句的集合&#xff0c;然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...