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

Elasticsearch简单学习

1、依赖的导入

<!--ES依赖-->
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

2、客户端链接

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://localhost:9200")));

3、索引库的相关操作

1、索引库的创建
@Test
void createTestIndex() throws IOException {/*创建索引库*///1.创建Request对象,索引库名称必须为小写字母CreateIndexRequest request = new CreateIndexRequest("test_index");String source = "{\n" +"        \"mappings\":{\n" +"        \"properties\":{\n" +"            \"id\":{\n" +"                \"type\":\"integer\"\n" +"            },\n" +"            \"name\":{\n" +"                \"type\":\"text\",\n" +"                \"analyzer\":\"ik_max_word\"\n" +"            },\n" +"            \"age\":{\n" +"                \"type\":\"integer\"\n" +"            },\n" +"            \"sex\":{\n" +"                \"type\":\"keyword\"\n" +"            },\n" +"            \"bossId\":{\n" +"                \"type\":\"integer\"\n" +"            },\n" +"            \"departmentId\":{\n" +"                \"type\":\"integer\"\n" +"            }\n" +"        }\n" +"    }\n" +"}";//2.准备请求的参数:DSL语句request.source(source, XContentType.JSON);//3.发请求client.indices().create(request, RequestOptions.DEFAULT);
}
2、判断索引库是否存在
@Test
void existsTestIndex() throws IOException {/*判断索引库是否存在*///1.创建Request对象,名称必须为小写字母GetIndexRequest request = new GetIndexRequest("test_index");//2.发请求boolean is = client.indices().exists(request, RequestOptions.DEFAULT);System.out.println(is);
}
3、删除索引库
@Test
void deleteTestIndex() throws IOException {/*删除索引库*///1.创建Request对象,名称必须为小写字母DeleteIndexRequest request = new DeleteIndexRequest("test_index");//2.发请求client.indices().delete(request, RequestOptions.DEFAULT);
}

4、文档的操作

1、创建文档
@Test
void createDocTest() throws IOException {//从数据库中获取数据对象Employee employee = employeeMapper.selectAllById(1);//1. 创建Request对象IndexRequest request = new IndexRequest("test_index").id(employee.getId().toString());//2.准备json文档String source = JSON.toJSONString(employee);//2.1准备json文档request.source(source, XContentType.JSON);//3.发请求client.index(request, RequestOptions.DEFAULT);
}
2、获取指定的文档
@Test
void getDocTest() throws IOException {//1.创建Request对象GetRequest request = new GetRequest("test_index","1");//2.发请求,得到结果GetResponse response = client.get(request, RequestOptions.DEFAULT);//3.解析结果String json = response.getSourceAsString();System.out.println(json);Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);
}
3、更新文档
@Test
void updateDocTest() throws IOException {//1.创建Request对象UpdateRequest request = new UpdateRequest("test_index","1");//2.准备DSL语句request.doc("age",18);//3.发请求client.update(request,RequestOptions.DEFAULT);
}
4、删除文档
@Test
void deleteDocTest() throws IOException {//1.创建Request对象DeleteRequest request = new DeleteRequest("test_index","1");//2.发请求client.delete(request,RequestOptions.DEFAULT);
}
5、批量操作(创建)
@Test
void batchCreateDocTest() throws IOException {//1.创建Request对象BulkRequest request = new BulkRequest();//2.准备DSL语句,批量增加文档List<Employee> employees = employeeMapper.selectAll();for(Employee e : employees){request.add(new IndexRequest("test_index").id(e.getId().toString()).source(JSON.toJSONString(e),XContentType.JSON));}//3.发请求client.bulk(request,RequestOptions.DEFAULT);
}

5、搜索文档

1、分词查询-查询全部
@Test
void matchAllTest() throws IOException {  //分词查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() // 查询全部.query(QueryBuilders.matchAllQuery());//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
2、分词查询-指定字段
@Test
void matchQueryTest() throws IOException { //分词查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() //查询指定字段的值,也可以指定多个字段 .multiMatchQuery().query(QueryBuilders.matchQuery("name","晨"));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
3、精确查询
@Test
void termQueryTest() throws IOException {  //精确查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() //精确查询只能查询 非text(分词字段),如果查询分词字段,则自动采用模糊分词查询.query(QueryBuilders.termQuery("age","33"));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
4、范围查询
@Test
void rangeQueryTest() throws IOException {  //范围查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() //范围查询,gte:大于等于,lte:小于等于,gt:大于,lt:小于.query(QueryBuilders.rangeQuery("age").gte(30).lte(35));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
5、复合查询
@Test
void boolQueryTest() throws IOException {  //复合查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.1创建复合查询对象BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();//2.2添加查询条件boolQuery.must(QueryBuilders.matchQuery("name","雨"));boolQuery.filter(QueryBuilders.rangeQuery("age").gte(20).lte(35));//2.3组织DSL参数request.source().query(boolQuery);//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
6、分页排序查询
@Test
void pageSortQueryTest() throws IOException {  //分页、排序查询// 页码,每页大小int page = 3,size = 10;//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2组织DSL参数request.source().from((page-1)*size) // 包含form,(page-1)*size,是前端传过来的页码和每页条数.size(size).sort("id", SortOrder.ASC).query(QueryBuilders.matchAllQuery());//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
6、高亮查询
@Test
void highLightQueryTest() throws IOException {  //高亮查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2组织DSL参数request.source().highlighter(new HighlightBuilder() //高亮显示.field("name") //字段名.requireFieldMatch(false) // 是否与查询字段匹配) // 用的默认标签 <em></em>.query(QueryBuilders.matchQuery("name","晨"));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);// 高亮显示,因为每条数据都是带有 晨 的,所以每条数据都有一个HighlightField用于替换HighlightField name = h.getHighlightFields().get("name");//替换employee.setName(name.getFragments()[0].toString());System.out.println(employee);}
}

相关文章:

Elasticsearch简单学习

1、依赖的导入 <!--ES依赖--> <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>2、客户端链接 RestHighLevelClient client new RestHigh…...

就像BGP中的AS_PATH一样,无论路途多远,我愿意陪你一起走——基于华为ENSP的BGP的路由负载均衡及过滤深入浅出

本篇技术博文摘要 &#x1f31f; 本文内容涵盖了BGP负载均衡的基本概念、配置技巧和在实际网络中的应用&#xff0c;包括如何在华为ENSP上实现负载均衡和路由过滤。通过配置BGP的前缀列表、ACL以及路由过滤策略&#xff0c;可以实现网络流量的精确控制和优化&#xff0c;提高网…...

valgrind 检测多线程 bug,检测 并发 bug concurrent bug parallel bug

valgrind --toolhelgrind ./your_program 如果检测的对象是大型程序&#xff0c;可以设定仅在某些函数中开启 valgrind 的检测&#xff1a; Valgrind 提供了一些客户请求&#xff08;client requests&#xff09;&#xff0c;可以在代码中插入特定的宏来控制 Valgrind 的行为。…...

游戏引擎学习第135天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 game_asset.cpp 的创建 在开发过程中&#xff0c;不使用任何现成的游戏引擎或第三方库&#xff0c;而是直接基于 Windows 进行开发&#xff0c;因为 Windows 目前仍然是游戏的标准平台&#xff0c;因此首先在这个环境中进行…...

异步操作返回原始上下文

是什么&#xff1f; 在讨论同步上下文执行回调的概念时&#xff0c;我们首先需要了解一些基本概念&#xff1a;同步与异步操作、上下文以及回调函数。 同步与异步操作&#xff1a; 同步操作是指代码按照顺序依次执行&#xff0c;每个操作必须等待前一个操作完成才能开始。这便…...

区块链中的数字签名:安全性与可信度的核心

数字签名是区块链技术的信任基石&#xff0c;它像区块链世界的身份证和防伪标签&#xff0c;确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言&#xff0c;带你彻底搞懂区块链中的数字签名&#xff01; 文章目录 1. 数字签名是什么&#xff1f;从现实世界到区块…...

vulnhub渗透日记23:bulldog

声明 文中涉及操作均来自靶机虚拟环境&#xff0c;禁止用于真实环境&#xff0c;任何未经授权的渗透测试都是违法行为&#xff01; 开搞 首先nmap扫描目标机开放端口和服务 访问80端口 扫目录撒 发现登录口 点击web-shell提示登录后才能使用 /dev/下面查看网页源码发现村咋h…...

macOS - 使用 tmux

文章目录 安装 tmux使用更多快捷键说明 安装 tmux brew install tmux使用 在终端输入 tmux 进入 tmux 界面&#xff0c;然后 输入 Control Option B 进入交互模式 输入 % 左右分栏&#xff0c;" 上下分割 上一个窗格&#xff1a;{&#xff0c;下一个&#xff1a;} PS…...

Armbian: 轻量级 ARM 设备专用 Linux 发行版全面解析

引言 在嵌入式开发和物联网&#xff08;IoT&#xff09;领域&#xff0c;选择合适的操作系统至关重要。对于 Raspberry Pi、Orange Pi、Banana Pi 以及 Rockchip、Amlogic、Allwinner 等 ARM 平台上的单板计算机&#xff08;SBC&#xff09;&#xff0c;一个高效、轻量级并且易…...

微服务通信:用gRPC + Protobuf 构建高效API

引言 在微服务架构中&#xff0c;服务之间的通信是系统设计的核心问题之一。传统的RESTful API虽然简单易用&#xff0c;但在性能、类型安全和代码生成等方面存在一定的局限性。gRPC作为一种高性能、跨语言的RPC框架&#xff0c;结合Protobuf&#xff08;Protocol Buffers&…...

Spring Boot 整合 JMS-ActiveMQ,并安装 ActiveMQ

1. 安装 ActiveMQ 1.1 下载 ActiveMQ 访问 ActiveMQ 官方下载页面&#xff0c;根据你的操作系统选择合适的版本进行下载。这里以 Linux 系统&#xff0c;Java环境1.8版本为例&#xff0c;下载 apache-activemq-5.16.7-bin.tar.gz。 1.2 解压文件 将下载的压缩包解压到指定目…...

容器 /dev/shm 泄漏学习

容器 /dev/shm 泄漏的介绍 在容器环境中&#xff0c;/dev/shm 是一个基于 tmpfs 的共享内存文件系统&#xff0c;通常用于进程间通信&#xff08;IPC&#xff09;和临时数据存储。由于其内存特性&#xff0c;/dev/shm 的大小是有限的&#xff0c;默认情况下 Docker 容器的 /de…...

Spring Boot 3.x 基于 Redis 实现邮箱验证码认证

文章目录 依赖配置开启 QQ 邮箱 SMTP 服务配置文件代码实现验证码服务邮件服务接口实现执行流程 依赖配置 <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr…...

车载测试:智能座舱测试中多屏联动与语音交互的挑战

智能座舱作为汽车智能化发展的核心&#xff0c;集成了多屏联动和语音交互功能&#xff0c;为驾驶员和乘客提供更便捷的体验。然而&#xff0c;这些功能的测试面临诸多挑战&#xff0c;包括多屏同步性、噪声干扰和复杂场景的处理。本文将详细分析这些挑战&#xff0c;探讨测试方…...

C/C++输入输出(1)

1.getchar和putchar 1.1getchar() 函数原型&#xff1a; 1 int getchar(void); getchar()函数返回用户从键盘输入的字符&#xff0c;使用时不带有任何参数。 程序运行到这个命令就会暂停&#xff0c;等待用户从键盘输入&#xff0c;等同于使用cin或scanf()方法读取一个字符…...

前端面试场景题葵花宝典之四

87.场景面试之大数运算&#xff1a;超过js中number最大值的数怎么处理 在 JavaScript 中&#xff0c;Number.MAX_SAFE_INTEGER&#xff08;即 2^53 - 1&#xff0c;即 9007199254740991&#xff09;是能被安全表示的最大整数。超过此值时&#xff0c;普通的 Number 类型会出现…...

探索Elasticsearch:索引的CRUD

在企业环境中&#xff0c;Elasticsearch的索引CRUD&#xff08;创建Create、读取Read、更新Update、删除Delete&#xff09;操作是非常基础且频繁使用的功能。这些操作对于管理和维护数据至关重要&#xff0c;尤其是在处理大规模数据集和需要实时搜索与分析的应用场景中。 目录…...

Java数据结构第十六期:走进二叉树的奇妙世界(五)

专栏&#xff1a;Java数据结构秘籍 个人主页&#xff1a;手握风云 目录 一、非递归实现遍历二叉树 1.1. 二叉树的前序遍历 1.2. 二叉树的中序遍历 1.3. 二叉树的后序遍历 一、非递归实现遍历二叉树 1.1. 二叉树的前序遍历 我们这里要使用栈来进行实现。我们反向思考一下为…...

【开源免费】基于SpringBoot+Vue.JS疫情管理系统(JAVA毕业设计)

本文项目编号 T 227 &#xff0c;文末自助获取源码 \color{red}{T227&#xff0c;文末自助获取源码} T227&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

有关Java中的集合(1):List<T>和Set<T>

学习目标 核心掌握List集合了解Set集合 1.List<T> ● java.util.List。有序列表。 ● List集合元素的特点&#xff1a;有序表示存取有序&#xff08;因为有索引&#xff09;而且可以重复 ● List常用实现类&#xff1a; ArrayList、LinkedList、Vector等 1.1 常用方法…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中&#xff0c;向量运算构成了理解几何结构的基石。叉乘&#xff08;外积&#xff09;与点积&#xff08;内积&#xff09;作为向量代数的两大支柱&#xff0c;表面上呈现出截然不同的几何意义与代数形式&#xff0c;却在深层次上揭示了向量间相互作用的…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...