ES学习日记(十一)-------Java操作ES之基本操作

前言

此篇博客还是一些基础操作,没什么可写的,需要的同学直接抄作业进行测试就可以

上一节写了连接和测试新增操作,这一节写java操作ES的基本操作,也就是增删改查,在这里补充一点知识,我们之前用了指定的索引进行指定添加

有一个情况是,如果我们指定了一个不存在的索引时,他会创建一个新的索引,例如我们这个ik1是不存在的,执行添加后也可以添加进去,索引库会新增一个叫ik1的索引,如图

一、查询

注:查询时需要查询存在的索引,不存在会报错,提示not found

    /*** 查询测试*/@Testpublic void testRetrieve() throws IOException {GetRequest getRequest = new GetRequest("ik","5");GetResponse response = client.get(getRequest,RequestOptions.DEFAULT);System.out.println(response);}

二、更新

忽略警告

/*** 更新** @throws IOException*/@Testpublic void testUpdate() throws IOException {HashMap<String,Object> map = new HashMap<>();map.put("name","哈西布鲁根");map.put("content","拳皇99");UpdateRequest updateRequest = new UpdateRequest("ik","5").doc(map);UpdateResponse updateResponse =client.update(updateRequest,RequestOptions.DEFAULT);System.out.println(updateRequest);}

三、删除

/*** 删除*/@Testpublic void testDelete() throws IOException {DeleteRequest deleteRequest = new DeleteRequest("ik","5");DeleteResponse deleteResponse = client.delete(deleteRequest,RequestOptions.DEFAULT);System.out.println(deleteRequest);}

四、批量增删改

其实就是增加了一个容器BulkRequest,把所有操作放到了这个容器里,然后同意操作

为了查看效果,注释了删除

    /*** 批量增删改*/@Testpublic void testCUD() throws IOException {BulkRequest request = new BulkRequest();/** 增加IndexRequest* XContentType键值对*/request.add(new IndexRequest("ik").id("5").source(XContentType.JSON,"name","罗翔","content","法外狂徒张三"));/** 更新UpdateRequest*/request.add(new UpdateRequest("ik","5").doc(XContentType.JSON,"name","罗翔","content","法外狂徒李四"));/** 删除DeleteRequest*/
//        request.add(new DeleteRequest("ik").id("5"));BulkResponse bulkResponse = client.bulk(request,RequestOptions.DEFAULT);System.out.println(bulkResponse.toString());}

五、查询

1.查询全部

查询全部,可变参数可指定多个索引,如果结果超过十条,默认返回十条

/*** 查询** @throws IOException*/@Testpublic void testQuery() throws IOException {//可以指定多个索引,用逗号隔开SearchRequest searchRequest = new SearchRequest("ik","shop");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//查询所有searchSourceBuilder.query(QueryBuilders.matchAllQuery());searchRequest.source(searchSourceBuilder);SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);System.out.println(response);}

查询结果是一个JSON,转了一下格式,看着清晰一点,查出来的内容是不能直接使用的,所以还需要转换格式

取出我们想要的部分,图例说明更清晰一些

有三种方式,根据实际使用情况选择,详见注释

/*** 查询** @throws IOException*/@Testpublic void testQuery() throws IOException {//可以指定多个索引,用逗号隔开SearchRequest searchRequest = new SearchRequest("ik","shop");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//查询所有,如果结果超过10条,默认显示10条searchSourceBuilder.query(QueryBuilders.matchAllQuery());searchRequest.source(searchSourceBuilder);SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);//调整结构,取出需要的部分long value = response.getHits().getTotalHits().value;System.out.println(response);if(0<value){SearchHit[] hits = response.getHits().getHits();for(SearchHit hit : hits){System.out.println(hit.getIndex());System.out.println(hit.getId());System.out.println(hit.getScore());//三种方式,根据实际使用情况选择System.out.println(hit.getSourceAsMap());System.out.println(hit.getSourceAsString());System.out.println(hit.getSourceRef());System.out.println("==========");}}}

2.按照条件查询

按照条件查询可以分为单字段单索引,单字段多索引,多字段单索引,多字段多索引,多个用逗号隔开就行,有点区别,但区别不大,详见代码注释

/*** 根据条件查询** @throws IOException*/@Testpublic void testQueryMatch() throws IOException {//可以指定多个索引,用逗号隔开SearchRequest searchRequest = new SearchRequest("ik","shop");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//单字段匹配-->字段对值
//        searchSourceBuilder.query(QueryBuilders.matchQuery("content","中国"));//多字段匹配-->值对多字段searchSourceBuilder.query(QueryBuilders.multiMatchQuery("中国","content","name"));searchRequest.source(searchSourceBuilder);SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);//调整结构,取出需要的部分long value = response.getHits().getTotalHits().value;System.out.println(response);if(0<value){SearchHit[] hits = response.getHits().getHits();for(SearchHit hit : hits){System.out.println(hit.getIndex());System.out.println(hit.getId());System.out.println(hit.getScore());//三种方式,根据实际使用情况选择System.out.println(hit.getSourceAsMap());System.out.println(hit.getSourceAsString());System.out.println(hit.getSourceRef());System.out.println("==========");}}}

3.排序
  /*** 排序** @throws IOException*/@Testpublic void testQuerySortHighLevel() throws IOException {//可以指定多个索引,用逗号隔开SearchRequest searchRequest = new SearchRequest("ik","shop");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//多字段匹配-->值对多字段searchSourceBuilder.query(QueryBuilders.multiMatchQuery("中国","content","name"));//从第几位开始分几条,分别是索引下标,大小//分页查询默认查询倒序searchSourceBuilder.from(0).size(5);
//        //正序写法
//        searchSourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.ASC));/** 指定字段排序* 注意不是数据库里面的字段,是es里面的字段* 默认正序,倒序.order(SortOrder.DESC))** 指定字段后,分数排序失效*/searchSourceBuilder.sort(SortBuilders.fieldSort("id"));searchRequest.source(searchSourceBuilder);SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);//调整结构,取出需要的部分long value = response.getHits().getTotalHits().value;System.out.println(response);if(0<value){SearchHit[] hits = response.getHits().getHits();for(SearchHit hit : hits){System.out.println(hit.getIndex());System.out.println(hit.getId());System.out.println(hit.getScore());//三种方式,根据实际使用情况选择System.out.println(hit.getSourceAsMap());System.out.println(hit.getSourceAsString());System.out.println(hit.getSourceRef());System.out.println("==========");}}}

4.高亮
/*** 排序** @throws IOException*/@Testpublic void testQuerySortHighLevel() throws IOException {//可以指定多个索引,用逗号隔开SearchRequest searchRequest = new SearchRequest("ik","shop");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//多字段匹配-->值对多字段searchSourceBuilder.query(QueryBuilders.multiMatchQuery("中国","content","name"));//从第几位开始分几条,分别是索引下标,大小//分页查询默认查询倒序searchSourceBuilder.from(0).size(5);
//        //正序写法searchSourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.ASC));/** 指定字段排序* 注意不是数据库里面的字段,是es里面的字段* 默认正序,倒序.order(SortOrder.DESC))** 指定字段后,分数排序失效*/
//        searchSourceBuilder.sort(SortBuilders.fieldSort("id"));//高亮HighlightBuilder highlightBuilder = new HighlightBuilder().field("content").preTags("<p style='color:red'>").postTags("</>");searchSourceBuilder.highlighter(highlightBuilder);searchRequest.source(searchSourceBuilder);SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);//调整结构,取出需要的部分long value = response.getHits().getTotalHits().value;System.out.println(response);if(0<value){SearchHit[] hits = response.getHits().getHits();for(SearchHit hit : hits){System.out.println(hit.getIndex());System.out.println(hit.getId());System.out.println(hit.getScore());//三种方式,根据实际使用情况选择System.out.println(hit.getSourceAsMap());System.out.println(hit.getSourceAsString());System.out.println(hit.getSourceRef());//显示高亮.fragments取文本System.out.println("hl: "+String.valueOf(hit.getHighlightFields().get("content").fragments()[0]));System.out.println("==========");}}}

写在最后

一些基础用法,详见注释,都能用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/807095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企微自建应用开发-注意事项

1、错误48002 api forbidden&#xff0c;接口无权限 1.1添加ip白名单&#xff0c;ip地址以企微返回值为准 1.2按照规则添加相应权限&#xff0c;例如&#xff1a;【联系我】二维码接口 2、错误60011 no privilege to access/modify contact/party/agent 2.2修改应用可见范围&am…

文件下载本地

1、不管什么格式的文件都需要转为字节数组 byte[] 2、再转为各种格式文件的的输出流 3、再转为文件输出流写入本地 注意File生成目录 FileOutputStream为具体全称。

C++ | Leetcode C++题解之第19题删除链表的倒数第N个结点

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy new ListNode(0, head);ListNode* first head;ListNode* second dummy;for (int i 0; i < n; i) {first first->next;}while (fi…

【产品】ADW300 无线计量仪表 用于计量低压网络的三相有功电能

1 概述 ADW300 无线计量仪表主要用于计量低压网络的三相有功电能&#xff0c;具有体积小、精度高、功能丰富等优点&#xff0c;并且可选通讯方式多&#xff0c;可支持 RS485 通讯和 Lora、2G、NB、4G 等无线通讯方式&#xff0c;增加了外置互感器的电流采样模式&#xff0c;从…

机器学习-09-图像处理

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中图像处理技术。 参考 02图像知识 色彩基础知识整理-色相、饱和度、明度、色调 图像特征提取&#xff08;VGG和Resnet特征提取卷积过程详解&#xff09; Python图像处理入门 【人工智能】PythonOpenCV…

Redis高级-分布式缓存RDB原理

分布式缓存 1.1.2.RDB原理 bgsave开始时会fork主进程得到子进程&#xff0c;子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。 fork采用的是copy-on-write技术&#xff1a; 当主进程执行读操作时&#xff0c;访问共享内存&#xff1b;当主进程执行写操…

idea中输入法被锁定如何清除

今天遇到一个问题&#xff1f;idea中输入法被锁定了&#xff0c;无论怎么切换输入法&#xff0c;切换中英文&#xff0c;在idea中输出的均为英文内容&#xff0c;该如何解决呢&#xff1f;&#xff08;idea官网&#xff1a;JetBrains: 软件开发者和团队的必备工具&#xff09; …

SQLite Android 绑定(十八)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite 在Android安装与定制方案&#xff08;十七&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 ​ 应用程序编程 加载共享库 在使用任何与 SQLite 相关的方法或对象之前&#xff0c;本机 SQLite 必…

ABAP ADBC_QUERY 测试代码

项目中使用的接口取数采用的是DBLink的方式&#xff0c;对方提供的表名太长&#xff0c;超过标准程序ADBC_QUERY的参数长度&#xff0c;于是写了一份简单的测试代码用来测试连接和取数。 DBCO配置&#xff1a; 测试程序&#xff1a; 程序源码&#xff1a; *&------------…

实验五 智能手机互联网程序设计(微信程序方向)实验报告

请完成数值比较任务&#xff1b; 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; index.js Page({ /** * 页面的初始数据 */ data: { num1:0, num2:0, num3:"" }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { },…

14款DevOps/SRE工具,助力提升运维效率

简介 随着平台工程的兴起&#xff0c;DevOps 和 SRE 不断发展&#xff0c;带来了新一代工具&#xff0c;旨在提高软件开发和运维的效率、可扩展性和可靠性。 在本篇文章中&#xff0c;我们将深入探讨一些最具发展前景的工具&#xff0c;它们正在塑造持续集成与部署、监控与可观…

【c语言】自定义类型:结构体详解

目录 自定义类型&#xff1a;结构体 结构体类型的声明 结构体变量的创建和初始化 结构的特殊声明 结构的自引用 结构体内存对齐 对其规则 为什么存在内存对齐&#xff1f; 修改默认对⻬数 结构体传参 结构体实现位段 位段的内存分配 位段的跨平台问题 位段的应用…

SpringBoot实现RabbitMQ的通配符交换机(SpringAMQP 实现Topic交换机)

文章目录 pomyml生产者消费者 Topic类型的Exchange与Direct相比&#xff0c;都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符&#xff01; Routingkey 一般都是有一个或多个单词组成&#xff0c;多个单词…

2024年思维100春季线上比赛倒计时9天,来看看官方样题

今天是2024年4月11日&#xff0c;距离2024年春季思维100活动第一阶段的线上比赛4月20日还有9天。今年思维100活动的考试重点是什么呢&#xff1f;虽然主办方未公布&#xff0c;我们可以从主办方发布的参考题目中来推测今年的考试重点&#xff0c;并且按照这个来举一反三&#x…

基于GAN的多变量时间序列污染训练集异常检测

论文地址&#xff1a;https://ieeexplore.ieee.org/document/9618824 论文源码&#xff1a;https://github.com/sxxmason/FGANomaly 期刊&#xff1a;IEEE Transactions on Knowledge and Data Engineering 多元时间序列异常检测在结构健康监测、智能运维、量化交易等诸多实际…

谷粒商城实战(012 业务-商城业务)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第203p-第p210的内容 介绍 这段除了210集都是商城业务&#xff0c;无太多可学习的&#xff0c;可跳过这7集&#xff0c;直接看第2100集 一个页…

CentOS 7.9安装过程的一些小插曲

首先请允许我推荐一下这款制作U盘启动盘的软件 Rufus - 轻松创建 USB 启动盘Rufus: Create bootable USB drives the easy wayhttps://rufus.ie/zh/ Rufus 是一款格式化和创建 USB 启动盘的辅助工具。 本软件适用于以下场景&#xff1a; 需要将可引导 ISO (Windows、Linux、UE…

Django之rest_framework(二)

格式后缀 为了使我们的响应不再硬连接到单个内容类型这一事实,我们可以将API格式后缀添加到API之后。使用格式后缀为我们提供了明确引用给定格式的URL,譬如:http://example.com/api/items/4.json 官网:2 - Requests and responses - Django REST framework views:在函数…

大厂Java笔试题之求一个整数转换为二进制后所有位上1的个数

题目&#xff1a;给定一个整数&#xff0c;求这个整数转换成二进制以后&#xff0c;所有位上1的个数&#xff08;数字大小不超过32位数字的范围&#xff09;。比如8这个整数&#xff0c;转换成二进制是00001000&#xff0c;那么就是输出1。public class Demo5 {public static v…

css实现扫码循环扫描特效

摘要&#xff1a; 需求中需要模拟扫描的效果来实现户型的生成&#xff01;由于接口ai生成的图片户型时间比较长&#xff0c;所以需要模拟特效&#xff01; <!DOCTYPE html> <html><head><mate charset"UTF-8" /><title>扫描</title…