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.hqwc.cn/news/599332.html

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

相关文章

Visual Studio 配置代码风格审查工具cpplint

文章目录 一、Visual Studio 配置代码风格审查工具cpplint1、安装2、运行3、集成到Visual Studio4、集成到Git 前言 cpplint是一个用于检查C代码风格的工具&#xff0c;它可以帮助我们发现潜在的编码问题&#xff0c;提高代码质量。cpplint遵循Google的C编码规范&#xff0c;通…

js通过Object.defineProperty实现数据响应式

目录 数据响应式属性描述符propertyResponsive 依赖收集依赖队列寻找依赖 观察器 派发更新Observer完整代码关于数据响应式关于Object.defineProperty的限制 数据响应式 假设我们现在有这么一个页面 <!DOCTYPE html> <html lang"en"><head><m…

【JavaScript】原型链/作用域/this指针/闭包

1.原型链 参考资料&#xff1a;Annotated ES5 ECMAScript起初并不支持如C、Smalltalk 或 Java 中“类”的形式创建对象&#xff0c;而是通过字面量表示法或者构造函数创建对象。每个构造函数都是一个具有名为“prototype”的属性的函数&#xff0c;该属性用于实现基于原型的继…

ArcGIS连PostgreSQL(Windows)

1 前言 PostgreSQL是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进&#xff0c;PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高的声誉。目前PostgreSQL可以运行在所有主流操作系统上&#xff0c;包括Linux、Unix&#xff08;AIX、BSD、HP-…

实现第一个动态链接库 游戏插件 成功在主程序中运行 dll 中定义的类

devc 5.11编译环境 dll编译环境设置参考 Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 插件 DLL代码和主程序代码如下 注意 dll 代码中的class 类名需要 和主程序 相同 其中使用了函数指针和强制类型转换 函数指针教程参考 以动态库链接库 .dll 探索结构体…

C# wpf 嵌入外部程序

WPF Hwnd窗口互操作系列 第一章 嵌入Hwnd窗口 第二章 嵌入WinForm控件 第三章 嵌入WPF控件 第四章 嵌入外部程序&#xff08;本章&#xff09; 第五章 底部嵌入HwndHost 文章目录 WPF Hwnd窗口互操作系列前言一、如何实现&#xff1f;1、定义属性2、进程嵌入&#xff08;1&…

BugKu:Flask_FileUpload

1.打开此题 通过题目知道这个是一个关于Flask的文件上传的漏洞题目 2.查看网页源代码 Flask是一个使用Python编写的轻量级Web应用框架。 这里又提示说用python来运行结果&#xff0c;那很有可能就是要通过python脚本来抓取flag 3.编辑Python脚本 工具&#xff1a;pycharm 文件…

论文阅读《Semantic Prompt for Few-Shot Image Recognition》

论文地址&#xff1a;https://arxiv.org/pdf/2303.14123.pdf 论文代码&#xff1a;https://github.com/WentaoChen0813/SemanticPrompt 目录 1、存在的问题2、算法简介3、算法细节3.1、预训练阶段3.2、微调阶段3.3、空间交互机制3.4、通道交互机制 4、实验4.1、对比实验4.2、组…

爬虫入狱笔记——xx政府网站公开政策数据

最近在学习爬虫&#xff0c;做个笔记吧 今天爬xx政府网站-政策法规栏目的数据 咱们首先需要找到数据从哪里来&#xff0c;鼠标右键->检查&#xff08;或者快捷键一般为F12&#xff09;检查元素&#xff0c;搜索关键词 eg.【违法案例】 回车&#xff0c; 如果没有的话&am…

比 Nest.js 更优雅的 TS 控制反转策略 - 依赖查找

一、Cabloy5.0 内测预告 Cabloy5.0 采用 TS 对整个全栈框架进行了脱胎换骨般的大重构&#xff0c;并且提供了更加优雅的 ts 控制反转策略&#xff0c;让我们的业务开发更加快捷顺畅 1. 新旧技术栈对比&#xff1a; 后端前端旧版js、egg2.0、mysqljs、vue2、framework7新版ts…

设计模式深度解析:AI大模型下的策略模式与模板方法模式对比解析

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 策略模式与模板方法模式对比解析 文章目录 &#x1f31f;引言&#x1f31f;Part 1:…

Rust语言入门第一篇-环境搭建

Rust语言入门第一篇 Rust官网 一&#xff0c;环境搭建 1、C开发环境配置 Rust 语言的底层是依赖于 C/C 编译器的。在安装 Rust 编译器时&#xff0c;通常会自动安装所需的 C/C 编译环境&#xff0c;以便 Rust 能够生成可执行文件或库。因此&#xff0c;在安装 Rust 之前&…