分布式搜索引擎ES-RestClient查询文档快速入门

RestClient查询文档快速入门

文章目录

    • RestClient查询文档快速入门
      • 1.1、match_all
      • 1.2、全文检索查询
      • 1.3、精确查询
      • 1.4、复合查询-boolean query
      • 1.5、排序和分页
      • 1.6、高亮(解析查询高亮结果)

1.1、match_all

package cn.mannor.hotel;import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;import java.io.IOException;import static cn.mannor.hotel.constants.HotelConstants.MAPPING_TEMPLATE;public class HotelSearchTest {private RestHighLevelClient restHighLevelClient; // 高级REST客户端,用于与Elasticsearch进行交互@Testvoid testMatchAll() throws IOException {//1.准备RequestSearchRequest hotelRequest = new SearchRequest("hotel");//2.准备DSLhotelRequest.source().query(QueryBuilders.matchAllQuery());//3.发送请求SearchResponse response = restHighLevelClient.search(hotelRequest, RequestOptions.DEFAULT);System.out.println(response);}/*** 初始化测试环境,创建并配置RestHighLevelClient实例。*/@BeforeEachvoid setUp() {this.restHighLevelClient = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.12.131:9200") // 设置Elasticsearch的地址和端口));}/*** 测试结束后清理资源,关闭RestHighLevelClient实例。** @throws IOException 如果关闭客户端时发生IO错误*/@AfterEachvoid tearDown() throws IOException {this.restHighLevelClient.close(); // 关闭高级REST客户端,释放资源}
}

注:下面的内容我只会放置测试方法。

完整获取:

    @Testvoid testMatchAll() throws IOException {//1.准备RequestSearchRequest hotelRequest = new SearchRequest("hotel");//2.准备DSLhotelRequest.source().query(QueryBuilders.matchAllQuery());//3.发送请求SearchResponse response = restHighLevelClient.search(hotelRequest, RequestOptions.DEFAULT);//4.解析响应SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;//4.2文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历for (SearchHit hit : hits) {//获取文档sourceString json = hit.getSourceAsString();//反序列化HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);System.out.println("hoteldoc:" + hotelDoc);}System.out.println(response);}

image-20240323104622141

其中,核心API包含所有方法:

  1. hotelRequest.source()
    

image-20240323133454901

  1. QueryBuilders
    

image-20240323133223401

1.2、全文检索查询

// 单字段查询
QueryBuilders.matchQuery("name", "上海");
// 多字段查询 
QueryBuilders.multiMatchQuery("如家", "name", "business");

1.3、精确查询

// 词条查询
QueryBuilders.termQuery("city", "杭州"); 
// 范围查询
QueryBuilders.rangeQuery("price").gte(100).lte(150);

例如:

    @Testvoid testMatch() throws IOException {//1.准备RequestSearchRequest hotelRequest = new SearchRequest("hotel");//2.准备DSL//2.1词条查询hotelRequest.source().query(QueryBuilders.termQuery("hotelName", "酒店"));//2.2范围查询// hotelRequest.source().query(QueryBuilders.rangeQuery("price").lt(300).gt(1000));//3.发送请求SearchResponse response = restHighLevelClient.search(hotelRequest, RequestOptions.DEFAULT);//4.解析响应(方法抽出来了)handelResponse(response);}

1.4、复合查询-boolean query

// 创建布尔查询
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
// 添加must条件
boolQuery.must(QueryBuilders.termQuery("city", "杭州")); 
// 添加filter条件
boolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));

例:

@Test
void testBooleQuery() throws IOException {//1.准备RequestSearchRequest hotelRequest = new SearchRequest("hotel");//2.准备DSLBoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();// 添加must条件boolQueryBuilder.must(QueryBuilders.matchQuery("city", "上海"));// 添加filter条件boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").lt(250));hotelRequest.source().query(boolQueryBuilder);//3.发送请求SearchResponse response = restHighLevelClient.search(hotelRequest, RequestOptions.DEFAULT);//4.解析响应(方法抽出来了)handelResponse(response);
}

基于上述几种查询,只需要记住核心API:QueryBuilders

1.5、排序和分页

@Test
void testPageAndSort() throws IOException {//页码,每页大小int page = 1, size = 5;//1.准备RequestSearchRequest hotelRequest = new SearchRequest("hotel");//2.准备DSLhotelRequest.source().query(QueryBuilders.matchAllQuery());//分页from ,size  排序sorthotelRequest.source().from((page-1)*size).size(5).sort("price", SortOrder.DESC);//3.发送请求SearchResponse response = restHighLevelClient.search(hotelRequest, RequestOptions.DEFAULT);//4.解析响应handelResponse(response);}

image-20240323140751109

1.6、高亮(解析查询高亮结果)

@Test
void testHighlight() throws IOException {//1.准备RequestSearchRequest hotelRequest = new SearchRequest("hotel");//2.准备DSLhotelRequest.source().query(QueryBuilders.matchQuery("name", "酒店"));//分页from ,size  排序sorthotelRequest.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));//3.发送请求SearchResponse response = restHighLevelClient.search(hotelRequest, 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 hit : hits) {//获取文档sourceString json = hit.getSourceAsString();//反序列化HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);//获取高亮结果Map<String, HighlightField> highlightFields = hit.getHighlightFields();if (!CollectionUtils.isEmpty(highlightFields)) {// 根据字段名获取高亮结果HighlightField highlightField = highlightFields.get("name");if (highlightField != null) {//获取高亮值String name = highlightField.getFragments()[0].string();//覆盖非高亮结果hotelDoc.setName(name);}}System.out.println("hoteldoc:" + hotelDoc);}System.out.println(response);
}

查询结果:
image-20240323142809826

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

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

相关文章

I2C系列(三):软件模拟I2C读写24C04

一.目标 PC 端的串口调试软件通过 RS-485 与单片机通信&#xff0c;控制单片机利用软件模拟 I2C 总线对 EEPROM&#xff08;24C04&#xff09; 进行任意读写。 二.RS-485简述 在工业控制领域&#xff0c;传输距离越长&#xff0c;要求抗干扰能力也越强。由于 RS-232 无法消除…

开放签开源电子签章白皮书-简版

开放签开源电子签章白皮书-简版 一、摘要&#xff1a; 开放签电子签章团队源自于电子合同SaaS公司&#xff0c;立志于通过开源、开放的模式&#xff0c;结合团队十多年的行业经验&#xff0c;将电子签章产品更简单、更低门槛的推广到各行各业中。让电子签章应用更简单&#x…

Pycharm小妙招之Anaconda离线配环境

Pycharm小妙招之Anaconda离线配环境———如何给无法联网的电脑配python环境&#xff1f; 1. 预备工作2. 电脑1导出包2.1 环境路径2.2 压缩py38导出至U盘 3. 电脑2导入包4. 验证是否导入成功4.1 conda查看是否导入4.2 pycharm查看能否使用 1. 预备工作 WINDOWS系统电脑1(在线)…

jmeter使用

jmeter是进行压力测试时候的关键的工具,对开发人员来说是重要的工具之一 一.安装 说明:因为jmeter是使用jave编写,并且从官网下载下来的是二进制source,需要java的运行环境即jdk ①去官网下载jdk的包https://www.oracle.com/java/technologies/downloads,之后再选好需要的jd…

利用Base64加密算法将数据加密解密

1. Base64加密算法 Base64准确来说并不像是一种加密算法&#xff0c;而更像是一种编码标准。 我们知道现在最为流行的编码标准就是ASCLL&#xff0c;它用八个二进制位&#xff08;一个char的大小&#xff09;表示了127个字符&#xff0c;任何二进制序列都可以用这127个字符表…

SpringBoot 文件上传(二)

上一节讲解了如何利用MultipartFile接收浏览器端上传的文件&#xff0c;这节讲解服务器端如何将文件保存到本地目录下&#xff0c;下节讲解服务端如何将文件保存在阿里云上。 本节需要解决两个难点&#xff1a; 文件重名问题文件大小限制问题 存储文件 首先解决如何存储文件…

Matlab|基于条件风险价值CVaR的微网动态定价与调度策略

目录 1 主要内容 模型示意图 电能交易流程 模型亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序复现文章《A cooperative Stackelberg game based energy management considering price discrimination and risk assessment》&#xff0c;建立基于主从博弈的考虑…

HTML5和CSS3笔记

一&#xff1a;网页结构(html)&#xff1a; 1.1&#xff1a;页面结构&#xff1a; 1.2&#xff1a;标签类型&#xff1a; 1.2.1&#xff1a;块标签&#xff1a; 1.2.2&#xff1a;行内标签&#xff1a; 1.2.3&#xff1a;行内块标签&#xff1a; 1.2.4&#xff1a;块标签与行…

Hive 数据迁移与备份

迁移类型 同时迁移表及其数据&#xff08;使用import和export&#xff09; 迁移步骤 将表和数据从 Hive 导出到 HDFS将表和数据从 HDFS 导出到本地服务器将表和数据从本地服务器复制到目标服务器将表和数据从目标服务器上传到目标 HDFS将表和数据从目标 HDFS 上传到目标 Hiv…

rider下ef core迁移

新建数据库 create database mockstu新建web项目 安装Microsoft.EntityFrameworkCore.SqlServer包 设置连接字符串 新建model using MockStuWeb.Models.EnumTypes; using System.ComponentModel.DataAnnotations;namespace MockStuWeb.Models {/// <summary>/// 学生…

SpringCloudAlibaba Nacos配置及应用

Nacos搭建及配置 nacos本机服务搭建 windows上搭建单机nacos&#xff1a; Releases alibaba/nacos GitHub 下载安装包 下载本地&#xff0c;解压&#xff0c;直接运行&#xff08;保证安装包的绝度路径只有英文字符&#xff0c;有中文会导致运行失败&#xff09;&#xff…

PHP 读取嵌入式数据 SQLite3

SQLite3 属于轻量级开源的嵌入式关系型数据库&#xff0c;但它支持 ACID(Atomicity,Consistency,Isolation,Durability) 事务。 SQLite Download Page: https://www.sqlite.org/download.html 第一步&#xff1a;在 php.ini 中开启 extensionsqlite3 第二步&#xff1a;连接数…

阿里云OSS存储的视频如何加水印

OSS是不能进行视频添加水印的&#xff0c;可以图片添加水印。 您可以在视频点播中进行配置&#xff1a; https://help.aliyun.com/zh/vod/user-guide/video-watermarks?spma2c4g.11186623.0.i2 原来的业务代码都是使用python 对oss的 视频进行上传 的,上传的视频路径已经保存到…

竞赛 opencv 图像识别 指纹识别 - python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于机器视觉的指纹识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适…

局域网的学习

什么是局域网&#xff1f;_哔哩哔哩_bilibili 家里接入WIFI的设备&#xff0c;相互之间就组成了一个局域网。 设备接入路由器的方法有两种&#xff1a; 一种是通过路由器发射的无线信号进行无线接入。 另一种是借助路由器上的RJ45网口进行有线接入。 设备接入路由器后&…

Deconstructing Denoising Diffusion Models for Self-Supervised Learning

开头说点题外话&#xff1a;这篇可谓是大咖云集啊&#xff0c;刘壮、谢赛宁、何凯明这些耳熟能详的名字&#xff0c;并且这篇论文一些人也觉得分析特别到位&#xff0c;不愧是大佬视角&#xff0c;配得上“解构”两个字&#xff1b;很巧的是&#xff0c;本科阶段的团队导师也是…

生产计划数据模型,实现能源企业数字化高效管理

随着市场经济的快速发展&#xff0c;能源企业在经济发展中的地位也随之提高。但由于能源企业在生产计划经济管理上存在指标不平衡、市场观念落后和环保意识欠缺等问题&#xff0c;导致企业的经济效益降低。目前&#xff0c;提高企业的生产计划管理是改善能源企业现状最有利的途…

python与excel第一节

python与excel第一节 由于excel在日常办公中大量使用&#xff0c;我们工作中常常会面对高频次或者大量数据的情况。使用python语言可以更加便捷的处理excel。 python与vba的比较 python语法更加简洁&#xff0c;相较于vba冗长复杂的语法&#xff0c;python更加容易学习。 p…

transformer的学习:Attention is all you need

目录 整体概述&#xff1a;​编辑​编辑 encoder&#xff1a; embedding&#xff1a; ​编辑 self-attention&#xff1a; 向量的相似度计算&#xff1a; qkv怎么来的​编辑 softmax&#xff1a; code multi-head-attention 位置编码&#xff1a; 残差&&FFN&…