elasticsearch的学习(二):Java api操作elasticsearch
简介
使用Java api操作elasticsearch
创建maven项目

pom.xml文件
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>elasticsearchTest</artifactId><version>1.0-SNAPSHOT</version><name>elasticsearchTest</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</version></dependency><!-- elasticsearch 的客户端 --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.8.0</version></dependency><!-- elasticsearch 依赖 2.x 的 log4j --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.9</version></dependency><!-- junit 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies>
</project>
创建索引
package org.christ.es;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;public class elasticSearchTest {public static void main(String[] args) throws IOException {//es客户端RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost",9200,"http")));//创建索引CreateIndexRequest request = new CreateIndexRequest("user");CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);//响应状态boolean acknowledged = createIndexResponse.isAcknowledged();System.out.println("操作是否成功:"+ acknowledged);//关闭es客户端restHighLevelClient.close();}
}
验证
使用postman发送get请求:http://localhost:9200/_cat/indices?v

查询索引
GetIndexRequest request = new GetIndexRequest("user");GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);System.out.println(getIndexResponse.getMappings());System.out.println(getIndexResponse.getAliases());System.out.println(getIndexResponse.getSettings());

删除索引
DeleteIndexRequest request = new DeleteIndexRequest("user");AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);System.out.println(delete.isAcknowledged());

添加数据
创建user类

```java
package org.christ.pojo;public class user {private String name;private String sex;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}
插入数据
//插入数据IndexRequest indexRequest = new IndexRequest();indexRequest.index("user").id("1");user user = new user();user.setName("christ");user.setSex("man");user.setAge(20);//转换成jsonObjectMapper objectMapper = new ObjectMapper();String s = objectMapper.writeValueAsString(user);indexRequest.source(s, XContentType.JSON);IndexResponse index = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);System.out.println(index.getResult());

验证
postman发送get请求:http://localhost:9200/user/_doc/1

修改数据
UpdateRequest updateRequest = new UpdateRequest();updateRequest.index("user").id("1");updateRequest.doc(XContentType.JSON,"sex","superman");UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);System.out.println(update.getResult());

验证
postman发送get请求:http://localhost:9200/user/_doc/1

查询数据
GetRequest getRequest = new GetRequest();getRequest.index("user").id("1");GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);System.out.println(documentFields.getSourceAsString());

删除数据
DeleteRequest deleteRequest = new DeleteRequest();deleteRequest.index("user").id("1");DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(delete.status());

批量插入数据
BulkRequest bulkRequest = new BulkRequest();bulkRequest.add(new IndexRequest().index("user").id("2").source(XContentType.JSON,"name","jack"));bulkRequest.add(new IndexRequest().index("user").id("3").source(XContentType.JSON,"name","john"));BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulk.getItems());

批量删除数据
//批量删除数据BulkRequest bulkRequest = new BulkRequest();bulkRequest.add(new DeleteRequest().index("user").id("2"));bulkRequest.add(new DeleteRequest().index("user").id("3"));BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulk);
验证
postman发送get请求:http://localhost:9200/user/_search

全量查询
SearchRequest searchRequest = new SearchRequest();searchRequest.indices("user");searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits hits = search.getHits();System.out.println(hits);for (SearchHit h:hits) {System.out.println(h.getSourceAsString());}

条件查询
SearchRequest searchRequest = new SearchRequest();searchRequest.indices("user");searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("sex","girl")));SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits hits = search.getHits();for (SearchHit h:hits) {System.out.println(h.getSourceAsString());}
和全量查询的区别是:
searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("sex","girl")));
QueryBuilders.matchAllQuery()换成了有条件的QueryBuilders.termQuery(“sex”,“girl”)

分页查询
SearchRequest searchRequest = new SearchRequest();searchRequest.indices("user");//SearchSourceBuilder提取出来SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());//第1页,展示两条数据query.from(0);query.size(2);searchRequest.source(query);SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits hits = search.getHits();System.out.println(hits);for (SearchHit h:hits) {System.out.println(h.getSourceAsString());}
把全量查询中的searchRequest.source()括号中的条件提取出来,设置from和size属性。
排序查询
SearchRequest searchRequest = new SearchRequest();searchRequest.indices("user");SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());query.sort("age", SortOrder.DESC);searchRequest.source(query);SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits hits = search.getHits();System.out.println(hits);for (SearchHit h:hits) {System.out.println(h.getSourceAsString());}
把全量查询中的searchRequest.source()括号中的条件提取出来,设置sort属性。

查询过滤字段
SearchRequest searchRequest = new SearchRequest();searchRequest.indices("user");SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());String[] excludes={};String[] includes={"name"};query.fetchSource(includes,excludes);searchRequest.source(query);SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits hits = search.getHits();System.out.println(hits);for (SearchHit h:hits) {System.out.println(h.getSourceAsString());}
SearchSourceBuilder 构建条件的时候,有一个fetchSource()方法,第一个参数就是包含哪些字段,第二个参数就是排除哪些字段。

条件查询
SearchRequest searchRequest = new SearchRequest();searchRequest.indices("user");SearchSourceBuilder query = new SearchSourceBuilder();BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// boolQueryBuilder.should(QueryBuilders.matchQuery("age","23"));
// boolQueryBuilder.should(QueryBuilders.matchQuery("age","18"));boolQueryBuilder.must(QueryBuilders.matchQuery("name","christ"));query.query(boolQueryBuilder);searchRequest.source(query);SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits hits = search.getHits();System.out.println(hits);for (SearchHit h:hits) {System.out.println(h.getSourceAsString());}

范围查询
SearchRequest searchRequest = new SearchRequest();searchRequest.indices("user");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();RangeQueryBuilder age = QueryBuilders.rangeQuery("age");age.gt(20);searchSourceBuilder.query(age);searchRequest.source(searchSourceBuilder);SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits hits = search.getHits();System.out.println(hits);for (SearchHit h:hits) {System.out.println(h.getSourceAsString());}

模糊查询
SearchRequest searchRequest = new SearchRequest();searchRequest.indices("user");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//name字符有一个不同也可以查出来searchSourceBuilder.query(QueryBuilders.fuzzyQuery("name","chris").fuzziness(Fuzziness.ONE));searchRequest.source(searchSourceBuilder);SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits hits = search.getHits();System.out.println(hits);for (SearchHit h:hits) {System.out.println(h.getSourceAsString());}

聚合查询
查询最大值
//聚合查询SearchRequest searchRequest = new SearchRequest();searchRequest.indices("user");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();MaxAggregationBuilder field = AggregationBuilders.max("maxAge").field("age");searchSourceBuilder.aggregation(field);searchRequest.source(searchSourceBuilder);SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println(search);

分组查询
SearchRequest searchRequest = new SearchRequest();searchRequest.indices("user");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();TermsAggregationBuilder field = AggregationBuilders.terms("groupAge").field("age");searchSourceBuilder.aggregation(field);searchRequest.source(searchSourceBuilder);SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println(search);

相关文章:
elasticsearch的学习(二):Java api操作elasticsearch
简介 使用Java api操作elasticsearch 创建maven项目 pom.xml文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…...
docker 部署 ElasticSearch;Kibana
ELasticSearch 创建网络 docker network create es-netES配合Kibana使用时需要组网,使两者运行在同一个网络下 命令 docker run -d \ --name es \ -e "discovery.typesingle-node" \ -v /usr/local/es/data:/usr/share/elasticsearch/data \ -v /usr/…...
k8s使用kustomize来部署应用
k8s使用kustomize来部署应用 本文主要是讲述kustomzie的基本用法。首先,我们说一下部署文件的目录结构。 ./ ├── base │ ├── deployment.yaml │ ├── kustomization.yaml │ └── service.yaml └── overlays└── dev├── kustomization.…...
基于开源FFmpeg和SDL2.0的音视频解码播放和存储系统的实现
目录 1、FFMPEG简介 2、SDL简介 3、视频播放器原理 4、FFMPEG多媒体编解码库 4.1、FFMPEG库 4.2、数据类型 4.3、解码 4.3.1、接口函数 4.3.2、解码流程 4.4、存储(推送) 4.4.1、接口函数 4.4.2、存储流程 5、SDL库介绍 5.1、数据结构 5.…...
保姆级教程,一文了解LVS
目录 一.什么是LVS tips: 二.优点(为什么要用LVS?) 三.作用 四.程序组成 五.LVS 负载均衡集群的类型 六.分布式内容 六.一.分布式存储 六.二.分布式计算 六.三.分布式常见应用 tips: 七.LVS 涉及相关的术语 八.LVS 负…...
【STM32】DMA数据转运(存储器到存储器)
本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 DMA简介 DMA时钟使能 DMA初始化 转运起始和终止的地址 转运方向 数据宽度 传输次数 转运触发方式 转运模式 通道优先级 开启DMA通道 DMA初始化框架 更改转运次数 DMA应用实例-…...
【Android】通过代码打开输入法
获取焦点 binding.editText.requestFocus()打开键盘 val imm getSystemService(InputMethodManager::class.java) imm.showSoftInput(binding.editText, InputMethodManager.SHOW_IMPLICIT)...
爬虫集群部署:Scrapyd 框架深度解析
🕵️♂️ 爬虫集群部署:Scrapyd 框架深度解析 🛠️ Scrapyd 环境部署 Scrapyd 是一个开源的 Python 爬虫框架,专为分布式爬虫设计。它允许用户在集群中调度和管理爬虫任务,并提供了简洁的 API 进行控制。以下是 Scr…...
pytorch GPU操作事例
>>> import torch >>> if_cuda torch.cuda.is_available() >>> print("if_cuda",if_cuda) if_cuda True >>> gpu_count torch.cuda.device_count() >>> print("gpu_count",gpu_count) gpu_count 8...
linux常见性能监控工具
常用命令top、free 、vmsata、iostat 、sar命令 具体更详细命令可以查看手册,这里只是简述方便找工具 整体性能top,内存看free,磁盘cpu内存历史数据可以vmsata、iostat 、sar、iotop top命令 交互:按P按照CPU排序,按M按照内存…...
C++ | Leetcode C++题解之第331题验证二叉树的前序序列化
题目: 题解: class Solution { public:bool isValidSerialization(string preorder) {int n preorder.length();int i 0;int slots 1;while (i < n) {if (slots 0) {return false;}if (preorder[i] ,) {i;} else if (preorder[i] #){slots--;i…...
【多模态处理】利用GPT逐一读取本地图片并生成描述并保存,支持崩溃后从最新进度恢复
【多模态处理】利用GPT逐一读取本地图片并生成描述,支持崩溃后从最新进度恢复题 代码功能:核心功能最后碎碎念 代码(使用中转平台url):代码(直接使用openai的key) 注意 代码功能: 读…...
【rk3588】获取相机画面
需求:获取相机画面,并在连接HDMI线,在显示器上显示 查找设备 v4l2-ctl --list-devices H65 USB CAMERA: H65 USB CAMERA (usb-0000:00:14.0-1):/dev/video2/dev/video3播放视频 gst-launch-1.0 v4l2src device/dev/video22 ! video/x-ra…...
数据结构的基本概念
数据结构的基本概念 数据是什么? 数据 : 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别(二进制0|1)和处理的符号的集合。数据是计算机程序加工的原料。 早期计算机处理的…...
AI人工智能机器学习
AI人工智能 机器学习的类型(ML) 学习意味着通过学习或经验获得知识或技能。 基于此,我们可以定义机器学习(ML) 它被定义为计算机科学领域,更具体地说是人工智能的应用,它提供计算机系统学习数据和改进经验而不被明确编程的能力。 基本上&…...
试用AWS全新神器:Amazon Bedrock的「Open Artifacts」版Claude.ai Artifacts
Claude.ai的Artifacts真是太方便了。 GitHub上的AWS Samples仓库中有一个仿制Artifacts的应用程序。 Open Artifacts for Amazon Bedrock https://github.com/aws-samples/open_artifacts_for_bedrockhttps://github.com/aws-samples/open_artifacts_for_bedrock本文将介绍「…...
W3C XML 活动
关于W3C的XML活动,XML(可扩展标记语言)是一种用于描述、存储、传送及交换数据的标准。W3C(万维网联盟)对XML的发展起到了关键作用,推出了一系列的版本和相关的技术规范。 XML版本历史: XML 1.0&…...
vue请求springboot接口下载zip文件
说明 其实只需要按照普通文件流下载即可,以下是一个例子,仅供参考。 springboot接口 RestController RequestMapping("/api/files") public class FileController {GetMapping("/download")public ResponseEntity<Resource>…...
PySide6||QPushButton的QSS样式
1、狗狗拜按钮 QQ202484-03338 (online-video-cutter.com) /* QPushButton的基本样式 */ QPushButton { background-image:url(:/xxx/第1帧.png); /* 设置背景图片 */ background-repeat: no-repeat; /* 不重复背景图片 */ background-position: center; /* 将背景图片居中…...
HarmonyOS鸿蒙应用开发之ArkTS基本语法
ArkTS(Ark TypeScript)是一种基于TypeScript的扩展语言,专为鸿蒙应用开发设计。它在保持TypeScript基本语法风格的基础上,对TypeScript的动态类型特性施加了更严格的约束,并引入了静态类型,以减少运行时开销…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
