分布式搜索引擎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.hqwc.cn/news/562736.html

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

相关文章

深度学习pytorch——多层感知机反向传播(持续更新)

在讲解多层感知机反向传播之前&#xff0c;先来回顾一下多输出感知机的问题&#xff0c;下图是一个多输出感知机模型&#xff1a; 课时44 反向传播算法-1_哔哩哔哩_bilibili 根据上一次的分析深度学习pytorch——感知机&#xff08;Perceptron&#xff09;&#xff08;持续更新…

基于python+vue的街道办管理系统flask-django-php-nodejs

在此基础上&#xff0c;结合现有街道办管理体系的特点&#xff0c;运用新技术&#xff0c;构建了以 python为基础的街道办管理信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;根据需求分析结果进行了系统的设计&#xff0c;并将其划分为管理员和用户二种角色和多个主…

分布式搜索引擎-DSL查询文档

分布式搜索引擎-DSL查询文档 文章目录 分布式搜索引擎-DSL查询文档1、DSL Query的分类1.1、全文检索查询1.2、精确查询1.3、地理查询1.4、复合查询1.5、Function Score Query1.6、复合查询Boolean Query 2、搜索结果处理2.1、排序2.2、分页2.3、深度分页2.4、高亮 1、DSL Query…

Fabric Measurement

Fabric Measurement 布料测量

SpringBoot 文件上传(二)

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

【Qt】使用Qt实现Web服务器(七):动态模板引擎

1、示例 2、源码 2.1 模板配置参数 配置文件中关于模板配置参数如下 path为存放模板的目录suffix为模板文件后缀[templates] path=templates suffix=.tpl encoding=UTF-8 cacheSize=1000000

案例实践 | 基于长安链的煤质检测智慧实验室

案例名称-煤质检测智慧实验室 ■ 建设单位 国能数智科技开发&#xff08;北京&#xff09;有限公司 ■ 用户群体 煤炭生产单位、电力单位、化工单位等产业链上下游单位 ■ 应用成效 化验效率提升50%&#xff0c;出验时间缩短40%&#xff0c;提高化验数据市场公信力 案例…

【漏洞复现】福建科立迅通信指挥调度平台pwd_update.php SQL注入漏洞 (CVE-2024-2621)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

JavaEE-文件操作和IO

我们先来认识狭义上的⽂件(file)。针对硬盘这种持久化存储的I/O设备&#xff0c;当我们想要进⾏数据保存时&#xff0c;往往不是保存成⼀个整体&#xff0c;⽽是独⽴成⼀个个的单位进⾏保存&#xff0c;这个独⽴的单位就被抽象成⽂件的概念&#xff0c;就类似办公桌上的⼀份份真…

android.os.TransactionTooLargeException解决方案,Kotlin

android.os.TransactionTooLargeException解决方案&#xff0c;Kotlin 首先&#xff0c;特意制造一个让Android发生TransactionTooLargeException的场景&#xff0c;一个Activity启动另外一个Activity&#xff0c;在Intent的Bundle里面塞入一个大的ArrayList: import android.…

Flutter学习10 - Json解析与Model使用

对于网络请求返回的 Json 数据&#xff0c;一般会进行如下解析&#xff1a; 将 Json String 解析为 Map<String, dynamic>将 Json String 解析为 Dart Model 发起一个返回 Json String 的网络请求 import package:http/http.dart as http;void main() {_doGet(); }_do…

【LeetCode】升级打怪之路 Day 26:回溯算法 — 集合划分问题

今日题目&#xff1a; 698. 划分为k个相等的子集 | LeetCode473. 火柴拼正方形 | LeetCode 参考文章&#xff1a; 经典回溯算法&#xff1a;集合划分问题 目录 LC 698. 划分为k个相等的子集 【classic&#xff0c;有难度】数据预处理&#xff1a;计算 target基本回溯优化 1&…