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的动态类型特性施加了更严格的约束,并引入了静态类型,以减少运行时开销…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...