Elasticsearch 索引库操作与 Rest API 使用详解
1. 引入 Elasticsearch 依赖
在开始之前,确保你的 Maven 或 Gradle 项目中已经引入了 Elasticsearch 的 Java 客户端库。你可以使用以下 Maven 依赖:
```xml
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.15.0</version>
</dependency>
```
2. 连接 Elasticsearch 服务器
建立与 Elasticsearch 服务器的连接是使用它的第一步。以下是一个简单的连接示例:
```java
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
```
3. 创建索引
索引是 Elasticsearch 存储、索引和搜索的基本单元。下面是一个创建索引的示例:
```java
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.RequestOptions;
CreateIndexRequest request = new CreateIndexRequest("blog");
client.indices().create(request, RequestOptions.DEFAULT);
```
4. 添加文档
一旦索引创建完成,你可以向其添加文档。以下是一个添加文档的简单示例:
```java
import org.elasticsearch.client.index.IndexRequest;
IndexRequest indexRequest = new IndexRequest("blog")
.id("1")
.source(Map.of("title", "Getting Started with Elasticsearch",
"content", "Elasticsearch is a powerful search engine."));
client.index(indexRequest, RequestOptions.DEFAULT);
```
5. 查询文档
使用 Elasticsearch 进行文档检索是其主要功能之一。以下是一个简单的查询示例:
```java
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.QueryBuilders;
SearchRequest searchRequest = new SearchRequest("blog");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery("title", "Elasticsearch"));
searchRequest.source(searchSourceBuilder);
SearchHits searchHits = client.search(searchRequest, RequestOptions.DEFAULT).getHits();
// 处理搜索结果
for (SearchHit hit : searchHits) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
System.out.println(sourceAsMap);
}
```
6. 更新文档
更新文档是 Elasticsearch 中常见的操作之一。以下是一个更新文档的示例:
```java
import org.elasticsearch.action.update.UpdateRequest;
UpdateRequest updateRequest = new UpdateRequest("blog", "1")
.doc(Map.of("content", "Elasticsearch is a scalable search engine."));
client.update(updateRequest, RequestOptions.DEFAULT);
```
7. 删除文档
删除文档同样是常见的操作。以下是一个删除文档的示例:
```java
import org.elasticsearch.client.DeleteRequest;
DeleteRequest deleteRequest = new DeleteRequest("blog", "1");
client.delete(deleteRequest, RequestOptions.DEFAULT);
```
8. 异常处理和资源释放
在实际开发中,务必注意异常处理和资源释放。使用 try-with-resources 语句可以确保资源在使用完毕后得到正确释放:
```java
try (RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
)) {
// 执行 Elasticsearch 操作
} catch (IOException e) {
e.printStackTrace();
}
```
9. 深入实战:高级搜索与聚合操作
除了基本的增删改查操作,Elasticsearch 还提供了强大的搜索和聚合功能。例如,通过使用 `SearchSourceBuilder` 可以实现更复杂的查询条件,而聚合操作则能够对数据进行深度分析。在实际项目中,我们可以结合业务需求使用这些高级功能,提供更灵活和强大的搜索体验。
```java
// 添加一个范围过滤条件
searchSourceBuilder.query(QueryBuilders.rangeQuery("publish_date").gte("2022-01-01"));
// 添加一个聚合操作,统计每个作者的文章数
searchSourceBuilder.aggregation(AggregationBuilders
.terms("authors").field("author.keyword")
.subAggregation(AggregationBuilders.count("article_count").field("title"))
);
// 执行搜索
SearchHits advancedSearchHits = client.search(searchRequest, RequestOptions.DEFAULT).getHits();
```
结语
通过本文的介绍,你应该对 Elasticsearch 中索引库的基本操作和 Rest API 有了更深入的理解。这些操作是构建强大搜索引擎的基础,同时也是 Java 开发者在实际项目中不可或缺的技能。在实际项目中,我们还可以结合高级搜索和聚合操作,提供更灵活和强大的搜索功能。希望这篇文章对你有所帮助。
相关文章:
Elasticsearch 索引库操作与 Rest API 使用详解
1. 引入 Elasticsearch 依赖 在开始之前,确保你的 Maven 或 Gradle 项目中已经引入了 Elasticsearch 的 Java 客户端库。你可以使用以下 Maven 依赖: xml <dependency> <groupId>org.elasticsearch.client</groupId> <ar…...
线性代数(四)| 解方程 齐次性 非齐次性 扩充问题
文章目录 1 方程解的个数2 解方程步骤2.1 齐次性方程组2.2 非齐次方程组 3 一些扩充问题 系数矩阵 增广矩阵 A m n X B A_{mn}XB AmnXB 1 方程解的个数 m 代表有m个方程 n代表有n个未知数 系数矩阵的秩与增广矩阵的秩不同 无解 若相同 ,如系数矩阵的秩和未知…...
快乐数问题
编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1ÿ…...
8 历史服务器配置
为了查看程序的历史运行情况,需要配置一下历史服务器 1、配置mapred-site.xml vim mapred-site.xml在该文件里面增加如下配置 //原先的配置不用删除 <!-- 历史服务器端地址 --> <property><name>mapreduce.jobhistory.address</name><…...
读书笔记:《精益数据分析》
《精益数据分析 . Lean Analytics Use Data to Build a Better Startup Faster》 加 . 阿利斯泰尔 . 克罗尔 本杰明 . 尤科维奇 著,韩知白 王鹤达 译 2023.7.27 ~ 2023.11.4 本以为是本纯数学的、介绍公式的数据分析用法的书,结果是:…...
酷柚易汛ERP- 组装单与拆卸单操作
1、功能介绍 组装单用来处理企业组装等加工业务,拆卸单用来处理企业拆卸等加工业务,支持一对多的产品加工业务。 2、主要操作 2.1 新增组装单 打开【仓库】-【组装单】新增组装单。 录入组合件与子件,单据审核后,系统根据存货…...
yolov8训练
介绍 训练深度学习模型包括向其提供数据并调整其参数,以便其能够做出准确的预测。Ultralytics YOLOv8中的训练模式旨在充分利用现代硬件功能,对目标检测模型进行有效和高效的训练。本指南旨在涵盖使用YOLOv8强大的一组功能开始训练自己的模型所需的所有细…...
抖音短视频账号矩阵系统、短视频矩阵源码+无人直播源码开发可打包
抖音短视频账号矩阵系统、短视频矩阵源码无人直播源码开发可打包 矩阵系统源码主要有三种框架:Spring、Struts和Hibernate。Spring框架是一个全栈式的Java应用程序开发框架,提供了IOC容器、AOP、事务管理等功能。Struts框架是一个MVC架构的Web应用程序框…...
NI和EttusResearchUSRP设备之间的区别
NI和EttusResearchUSRP设备之间的区别 概述 USRP(通用软件无线电外设)设备是业界领先的商软件定义无线电(SDR)。全球数以千计的工程师使用USRPSDR来快速设计、原型设计和部署无线系统。它们以两个不同的品牌进行营销和销售&…...
WPF UI样式介绍
WPF(Windows Presentation Foundation)是微软的一个用于创建桌面客户端应用程序的UI框架。WPF使用XAML(可扩展应用程序标记语言)作为其界面设计语言,这使得开发者能够以声明性方式定义UI元素和布局。 在WPF中…...
【开源】基于Vue.js的校园失物招领管理系统的设计和实现
目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系统公告模块2.4 感谢留言模块 三、界面展示3.1 登录注册3.2 招领模块3.3 寻物模块3.4 公告模块3.5 感谢留言模块3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 基于Vue…...
计算机视觉中目标检测的数据预处理
本文涵盖了在解决计算机视觉中的目标检测问题时,对图像数据执行的预处理步骤。 首先,让我们从计算机视觉中为目标检测选择正确的数据开始。在选择计算机视觉中的目标检测最佳图像时,您需要选择那些在训练强大且准确的模型方面提供最大价值的图…...
es 查询多个索引的文档
es 查询多个索引 第一种做法: 多个索引,用逗号隔开 GET /book_2020_09,book_2021_09/_search第二种做法: 可以用 * 模糊匹配。。比如 book* ,表示查询所有 book开头的 索引。 GET /book*/_search GET /*book*/_search第二种做…...
用java把服务器某个目录日志实时打印出来
1.引入第三方包 <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version> </dependency>2.代码如下 import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import …...
金融信贷行业如何准确——大数据精准定位获客渠道
通过大数据精准获客,不仅可以及时拦截网址浏览量,还可以访问移动贷款应用软件的高频活跃客户和新注册客户。此外,通过大数据进行准确的客户获取,还可以获得电话座机号码的实时通信记录,捕捉小程序应用程序和关键词搜索…...
LeetCode 面试题 16.21. 交换和
文章目录 一、题目二、C# 题解 一、题目 给定两个整数数组,请交换一对数值(每个数组中取一个数值),使得两个数组所有元素的和相等。 返回一个数组,第一个元素是第一个数组中要交换的元素,第二个元素是第二…...
未来之路:大模型技术在自动驾驶的应用与影响
本文深入分析了大模型技术在自动驾驶领域的应用和影响,万字长文,慢慢观看~ 文中首先概述了大模型技术的发展历程,自动驾驶模型的迭代路径,以及大模型在自动驾驶行业中的作用。接着,详细介绍了大模型的基本定义、基础功…...
Skywalking流程分析_5(字节码增强)
SkyWalkingAgent.Transformer#transform 此方法就是进行字节码增强的过程 private static class Transformer implements AgentBuilder.Transformer {private PluginFinder pluginFinder;Transformer(PluginFinder pluginFinder) {this.pluginFinder pluginFinder;}Override…...
Windows conan环境搭建
Windows conan环境搭建 1 安装conan1.1 安装依赖软件1.1.1 python安装1.1.2 git bash安装1.1.3 安装Visual Studio Community 20191.1.3.1 选择安装的组件1.1.3.2 选择要支持的工具以及对应的SDK 1.1.4 vscode安装 1.3 验证conan功能1.4 查看conancenter是否包含poco包1.5 查看…...
如何使用Cpolar+Tipask,在ubuntu系统上搭建一个私人问答网站
文章目录 前言2.Tipask网站搭建2.1 Tipask网站下载和安装2.2 Tipask网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3 Cpolar稳定隧道(本地设置) 4. 公网访问测试5. 结语 前…...
微信聊天记录的数字守护:WeChatMsg本地存储解决方案全解析
微信聊天记录的数字守护:WeChatMsg本地存储解决方案全解析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...
C++程序发生崩溃闪退后为什么会自动重启?是因为程序中启用了重启管理器,系统感知到程序异常退出后自动重启程序
最近在使用sdkdemo程序测试我们的SDK功能时,发现当我们关闭程序后(程序确实关闭了),程序居然又自动启动起来了!后来运行Debug版本的sdkdemo,在关闭程序时会弹出报错提示框:估计是程序在退出时产…...
LAMMPS read_data命令保姆级教程:从MS建模到data文件生成的完整避坑指南
LAMMPS read_data命令全流程实战:从分子建模到多体系合并的进阶指南 当你在Materials Studio中精心构建的分子模型终于完成,准备转入LAMMPS进行分子动力学模拟时,是否曾被data文件的各种格式要求绊住脚步?作为连接建模软件与计算引…...
Overleaf-Workshop:在VSCode中实现Open Overleaf项目的无缝协作与高效管理
Overleaf-Workshop:在VSCode中实现Open Overleaf项目的无缝协作与高效管理 【免费下载链接】Overleaf-Workshop Open Overleaf/ShareLaTex projects in vscode, with full collaboration support. 项目地址: https://gitcode.com/gh_mirrors/ov/Overleaf-Workshop…...
3个步骤实现极致跨平台远程控制:BilldDesk Pro突破性体验
3个步骤实现极致跨平台远程控制:BilldDesk Pro突破性体验 【免费下载链接】billd-desk 基于Vue3 WebRTC Nodejs Flutter搭建的远程桌面控制 项目地址: https://gitcode.com/gh_mirrors/bi/billd-desk 还在为远程协作的种种限制而烦恼吗?当你需…...
实战工业测控:基于快马AI生成LabVIEW与数据库、Web集成的监控系统
今天想和大家分享一个最近用LabVIEW实现的工业测控项目实战经验。这个项目是为某制造车间设计的生产线监控系统,主要实现了设备数据采集、存储和可视化展示的全流程。下面我会分步骤详细介绍实现过程。 数据采集模块设计 这个环节需要实时获取产线上多个设备的运行…...
告别版本冲突:利用快马平台高效管理多jdk环境,提升开发效率
作为一名Java开发者,我经常遇到这样的困扰:接手不同项目时,每个项目可能要求使用不同版本的JDK。手动切换环境变量、反复安装卸载JDK版本,不仅浪费时间,还容易出错。最近我发现了一个高效的解决方案——利用InsCode(快…...
GeoServer REST API实战:手把手教你用Python封装自己的批量发布工具
GeoServer REST API深度封装:Python自动化发布框架设计与实战 1. 为什么需要自定义GeoServer发布工具? 在GIS项目实施过程中,我们经常面临数百个地理数据文件需要快速发布的场景。传统手动操作不仅效率低下(单个文件平均耗时2分钟…...
Qwen3-VL:30B多模态提示词工程:Clawdbot中优化图文提问格式提升飞书响应质量
Qwen3-VL:30B多模态提示词工程:Clawdbot中优化图文提问格式提升飞书响应质量 1. 引言:从部署到优化的进阶之路 在上一篇文章中,我们已经成功在星图AI云平台部署了Qwen3-VL:30B多模态大模型,并通过Clawdbot搭建了基础框架。现在面…...
近场声全息(NAH)数据与MATLAB实现
一、近场声全息核心原理 近场声全息(NAH)通过测量声源近场区域的声压分布(包含传播波和倏逝波成分),利用空间傅里叶变换重建声场分布。其核心公式基于Helmholtz-Kirchhoff积分方程:其中: p0(kx,…...
