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

【Elasticsearch入门到落地】16、RestClient查询文档-快速入门

接上篇《15、DSL排序、分页及高亮》
上一篇我们讲解了ElasticSearch的DSL搜索结果处理(排序、分页及高亮)。本篇我们开启使用Java程序实现ElasticSearch查询文档的各项功能。

经过前面的学习,我们已经可以使用DSL来实现ElasticSearch文档查询和结果处理了。
本篇我们就来学习使用Java的RestClient实现类似的功能。

一、环境准备

1.RestClient简介

之前的章节我们已经介绍过RestClient,这里估计很多童鞋都忘记了,我们再重新温故一遍。
RestClient是操作Elasticsearch的轻量级HTTP客户端,支持通过RESTful API实现索引管理、文档增删改查等操作。相比原生Transport客户端,它具有跨语言兼容和与ES版本解耦的优势。

2.创建Java工程

(1)创建新项目

打开IntelliJ IDEA,点击New Project:

选择 Maven(推荐)或 Gradle 项目类型,选择JDK版本(建议 1.8+),GroupId配置为“com.example”,ArtifactId配置为“es-restclient-demo”:

点击Create建项目。

3.配置 Maven 依赖

在pom.xml中添加Elasticsearch RestClient依赖:

<?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>com.example</groupId><artifactId>es-restclient-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- Elasticsearch RestClient --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version> <!-- 与ES服务器版本一致 --></dependency><!-- 日志依赖(可选) --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.36</version></dependency><!-- JSON处理(如需要) --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.1</version></dependency><!-- 单元测试(如需要) --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>compile</scope></dependency></dependencies></project>

然后运行Maven的“Reload Project”来加载新加入的依赖:

可以看到正在加载:

加载完毕后,我们可以在依赖库中看到添加的新依赖:

4.配置Elasticsearch连接

在src的com.example包下创建工具类ElasticsearchClient.java:

package com.example;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.junit.Test;public class ElasticsearchClient {private static RestHighLevelClient client;public static RestHighLevelClient getClient() {if (client == null) {client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.2.129", 9200, "http")));System.out.println("client客户端对象创建成功!");}return client;}public static void close() throws Exception {if (client != null) {client.close();System.out.println("client客户端已关闭!");}}@Testpublic void testClient() throws Exception {getClient();close();}
}

运行testClient后效果:

这里我们就创建好RestClient的客户端对象了,可以用该对象进行各种查询。

二、实现查询

我们通过match查询来演示下基本的API。我们新建一个MatchQueryExample.java类。其中需要使用到一下几个依赖类:

●SearchRequest: 用于构建搜索请求(指定索引名、查询条件等)。
●SearchResponse: 封装搜索结果的响应对象。
●RequestOptions: 请求配置(这里使用默认配置 DEFAULT)。
●RestHighLevelClient: Elasticsearch 的高级客户端,用于发送请求。
●QueryBuilders: 工具类,提供各种查询构建器(如 matchQuery)。
●SearchSourceBuilder: 用于构建搜索的查询条件、分页、排序等。

实现代码如下:

package com.example;import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;public class MatchQueryExample {public static void main(String[] args) throws Exception {// 通过提前写好的工具类,获取 Elasticsearch 客户端RestHighLevelClient client = ElasticsearchClient.getClient();// 构建查询请求// 1.指定索引名//创建 SearchRequest 对象,并指定要查询的索引名为hotel。SearchRequest request = new SearchRequest("hotel");// 2.构建查询条件// SearchSourceBuilder:用于定义查询的详细参数(如查询内容、分页、排序等)。SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//构建一个匹配查询://字段名:name(表示搜索 hotel 索引中的 name 字段)。//搜索词:"希尔顿"(匹配包含“希尔顿”的文档)。将查询条件设置到 sourceBuilder 中sourceBuilder.query(QueryBuilders.matchQuery("name", "希尔顿"));// 3.将查询条件绑定到请求request.source(sourceBuilder);// 执行查询// 调用 client.search() 方法发送请求:// 参数1:request(封装了索引名和查询条件)。// 参数2:RequestOptions.DEFAULT(使用默认请求配置)。SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 处理结果// response.getHits(): 获取所有匹配的文档(返回 SearchHits 对象)。SearchHits searchHits = response.getHits();// 获取查询的总数long total = searchHits.getTotalHits().value;// 获取查询的结果数组SearchHit[] hits = searchHits.getHits();// 遍历每个匹配的文档(SearchHit 对象)。for(SearchHit hit : hits){// hit.getSourceAsString(): 将文档的 JSON 源数据转为字符串并打印。String hitJson = hit.getSourceAsString();System.out.println(hitJson);}ElasticsearchClient.close();}
}

效果:

这里实现的效果如同DSL如下的查询语句:

GET /hotel/_search
{"query": {"match": {"name": "希尔顿"}}
}

其中解析的hits就是原json对象中的每一个结果文档子结果:

RestAPI中其中构建查询条件的核心部分是由一个名为QueryBuilders的工具类提供的,其中包含了各种查询方法:

三.总结

使用RestClient查询ES文档的基本步骤是:
1.创建SearchRequest对象
2.准备Request.source(),也就是DSL。QueryBuilders来构建查询条件传入Request.source()的 query()方法
3.发送请求,得到结果
4.解析结果(参考JSON结果,从外到内,逐层解析)

至此RestClient查询文档的快速入门就讲解完毕了,下一篇我们来继续讲解使用RestClient进行term、range、bool查询,以及封装公用方法简化查询代码。

转载请注明出处:https://blog.csdn.net/acmman/article/details/150143489

http://www.dtcms.com/a/323880.html

相关文章:

  • AIStarter:全网唯一跨平台桌面AI管理工具,支持Windows、Mac和Linux一键部署
  • 滚动条开始滚动时,左侧导航固定,当左侧内容触底到footer时左侧内容取消固定并跟随滚动条滚动
  • ADK【4】内置前端调用流程
  • TDengine IDMP 快速体验(方式二 通过 docker)
  • 安全引导功能及ATF的启动过程(五)
  • Linux 虚拟机磁盘空间占满-全面清理方案
  • GoBy 工具联动 | GoBy AWVS 自动化漏扫工作流
  • [论文阅读] 人工智能 + 软件工程 | 大型语言模型对决传统方法:多语言漏洞修复能力大比拼
  • Kafka 生产者与消费者分区策略全解析:从原理到实践
  • 音视频学习(五十一):AAC编码器
  • Samba使用
  • java常见算法
  • 前端开发的奇技淫巧 --- 持续更新中
  • 《P3403 跳楼机》
  • 搭建本地 Git 服务器
  • Beelzebub靶机攻略
  • 昼夜节律修复方案(2025.08.10-08.17)
  • 基于python高校固定资产管理系统
  • vue3项目中在一个组件中点击了该组件中的一个按钮,那么如何去触发另一个组件中的事件?
  • 计算机网络:(十四)传输层(下)详细讲解TCP报文段的首部格式,TCP 可靠传输的实现与TCP 的流量控制
  • 纳维 - 斯托克斯方程的存在性与光滑性:流体世界的千年谜题
  • Dify集成 Echarts 实现智能数据报表集成与展示实战详解
  • 【东枫科技】FR2/FR3 毫米波原型开发平台
  • ubuntu 安装内核模块驱动 DKMS 介绍
  • 基于Ubuntu20.04的环境,编译QT5.15.17源码
  • 瑞芯微 RK3588 平台驱动开发 学习计划
  • Ubuntu 22.04 离线环境下完整安装 Anaconda、CUDA 12.1、NVIDIA 驱动及 cuDNN 8.9.3 教程
  • 设计模式(Design Pattern)
  • vue和react和uniapp的状态管理分别是什么,并且介绍和怎么使用
  • FreeRTOS 任务与中断函数:运行机制、关键区别与使用准则