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

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使用时需要组网&#xff0c;使两者运行在同一个网络下 命令 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的基本用法。首先&#xff0c;我们说一下部署文件的目录结构。 ./ ├── 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、存储&#xff08;推送&#xff09; 4.4.1、接口函数 4.4.2、存储流程 5、SDL库介绍 5.1、数据结构 5.…...

保姆级教程,一文了解LVS

目录 一.什么是LVS tips: 二.优点&#xff08;为什么要用LVS&#xff1f;&#xff09; 三.作用 四.程序组成 五.LVS 负载均衡集群的类型 六.分布式内容 六.一.分布式存储 六.二.分布式计算 六.三.分布式常见应用 tips&#xff1a; 七.LVS 涉及相关的术语 八.LVS 负…...

【STM32】DMA数据转运(存储器到存储器)

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 DMA简介 DMA时钟使能 DMA初始化 转运起始和终止的地址 转运方向 数据宽度 传输次数 转运触发方式 转运模式 通道优先级 开启DMA通道 DMA初始化框架 更改转运次数 DMA应用实例-…...

【Android】通过代码打开输入法

获取焦点 binding.editText.requestFocus()打开键盘 val imm getSystemService(InputMethodManager::class.java) imm.showSoftInput(binding.editText, InputMethodManager.SHOW_IMPLICIT)...

爬虫集群部署:Scrapyd 框架深度解析

&#x1f575;️‍♂️ 爬虫集群部署&#xff1a;Scrapyd 框架深度解析 &#x1f6e0;️ Scrapyd 环境部署 Scrapyd 是一个开源的 Python 爬虫框架&#xff0c;专为分布式爬虫设计。它允许用户在集群中调度和管理爬虫任务&#xff0c;并提供了简洁的 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命令 具体更详细命令可以查看手册&#xff0c;这里只是简述方便找工具 整体性能top,内存看free&#xff0c;磁盘cpu内存历史数据可以vmsata、iostat 、sar、iotop top命令 交互&#xff1a;按P按照CPU排序&#xff0c;按M按照内存…...

C++ | Leetcode C++题解之第331题验证二叉树的前序序列化

题目&#xff1a; 题解&#xff1a; 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逐一读取本地图片并生成描述&#xff0c;支持崩溃后从最新进度恢复题 代码功能&#xff1a;核心功能最后碎碎念 代码&#xff08;使用中转平台url&#xff09;&#xff1a;代码&#xff08;直接使用openai的key&#xff09; 注意 代码功能&#xff1a; 读…...

【rk3588】获取相机画面

需求&#xff1a;获取相机画面&#xff0c;并在连接HDMI线&#xff0c;在显示器上显示 查找设备 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…...

数据结构的基本概念

数据结构的基本概念 数据是什么&#xff1f; 数据 &#xff1a; 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别&#xff08;二进制0|1&#xff09;和处理的符号的集合。数据是计算机程序加工的原料。 早期计算机处理的…...

AI人工智能机器学习

AI人工智能 机器学习的类型(ML) 学习意味着通过学习或经验获得知识或技能。 基于此&#xff0c;我们可以定义机器学习(ML) 它被定义为计算机科学领域&#xff0c;更具体地说是人工智能的应用&#xff0c;它提供计算机系统学习数据和改进经验而不被明确编程的能力。 基本上&…...

试用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活动&#xff0c;XML&#xff08;可扩展标记语言&#xff09;是一种用于描述、存储、传送及交换数据的标准。W3C&#xff08;万维网联盟&#xff09;对XML的发展起到了关键作用&#xff0c;推出了一系列的版本和相关的技术规范。 XML版本历史&#xff1a; XML 1.0&…...

vue请求springboot接口下载zip文件

说明 其实只需要按照普通文件流下载即可&#xff0c;以下是一个例子&#xff0c;仅供参考。 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&#xff08;Ark TypeScript&#xff09;是一种基于TypeScript的扩展语言&#xff0c;专为鸿蒙应用开发设计。它在保持TypeScript基本语法风格的基础上&#xff0c;对TypeScript的动态类型特性施加了更严格的约束&#xff0c;并引入了静态类型&#xff0c;以减少运行时开销…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

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

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

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...