elasticsearch10-查询文档处理

news2025/1/17 1:08:09

请添加图片描述
个人名片:

博主:酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志三人行,必有我师焉。

请添加图片描述
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

目录

  • 三.RestClient查询文档
    • 1. 快速入门
    • 2. match查询
    • 3. 精确查询
    • 4. 布尔查询
    • 5. 排序、分页
    • 6. 高亮

三.RestClient查询文档

Elasticsearch中的RestClient是用于发送HTTP请求的客户端。
RestClient可用于创建索引、获取索引、删除索引、插入/更新文档、删除文档、搜索文档等操作。

RestClient的使用效果:

  • 可以在Java应用程序中实现Elasticsearch的各种功能,例如创建索引、获取索引、删除索引、插入/更新文档、删除文档、搜索文档等。
  • 可以实现高可用性、高扩展性的应用程序,通过RestClient可以方便地实现集群管理和负载均衡。
  • 可以实现更快速的数据检索和查询,提高查询效率,减少查询时间。
  • 可以实现更安全的数据检索和查询,通过身份验证和权限控制等机制,保护数据的机密性和完整性。
  • 可以实现更灵活的数据检索和查询,支持多种查询方式和过滤器,可以根据需求定制化查询结果。

1. 快速入门

初始化:

@SpringBootTest
public class DSLSearchTest {

    @Autowired
    private RestHighLevelClient client;

    @BeforeEach
    void setup(){
        this.client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.179.128:9200")
        ));
    }

    @AfterEach
    void tearDown() throws IOException {
        this.client.close();
    }
}

查询结果解析:

private void handleResponse(SearchResponse response) {
    SearchHits hits = response.getHits();
    long total = hits.getTotalHits().value;
    System.out.println("数据总条数:" + total + "条");
    SearchHit[] hitsHits = hits.getHits();
    for (SearchHit hit : hitsHits) {
        String 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);
    }
}

2. match查询

  1. 查询全部
@Test
void testMathAll() throws IOException {
    SearchRequest request = new SearchRequest("hotel");
    request.source().query(QueryBuilders.matchAllQuery());
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);

    handleResponse(response);
}
  1. 单字段查询
@Test
void testMath() throws IOException {
    SearchRequest request = new SearchRequest("hotel");
    request.source().query(QueryBuilders.matchQuery("all", "如家"));
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    handleResponse(response);
}
  1. 多字段查询
@Test
void testMultiMath() throws IOException {
    SearchRequest request = new SearchRequest("hotel");
    request.source().query(QueryBuilders.multiMatchQuery("如家", "brand", "name", "business"));
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    handleResponse(response);
}

3. 精确查询

  1. 精确查询
@Test
void testTerm() throws IOException {
    SearchRequest request = new SearchRequest("hotel");
    request.source().query(QueryBuilders.termQuery("city", "上海"));
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    handleResponse(response);
}
  1. 范围查询
@Test
void testRange() throws IOException {
    SearchRequest request = new SearchRequest("hotel");
    request.source().query(QueryBuilders.rangeQuery("price").gte(100).lte(150));
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    handleResponse(response);
}

4. 布尔查询

@Test
void testBool() throws IOException {
    SearchRequest request = new SearchRequest("hotel");
    BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
    boolQuery.must(QueryBuilders.termQuery("city", "上海"))
            .should(QueryBuilders.termQuery("brand", "皇冠假日"))
            .should(QueryBuilders.termQuery("brand", "华美达"))
            .mustNot(QueryBuilders.rangeQuery("price").lte(500))
            .filter(QueryBuilders.rangeQuery("score").gte(45));
    request.source().query(boolQuery);
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    handleResponse(response);
}

5. 排序、分页

@Test
void testPageAndSort() throws IOException {
    int page = 1, size = 5;

    SearchRequest request = new SearchRequest("hotel");
    request.source().query(QueryBuilders.matchAllQuery())
            .from((page - 1) * size).size(size)
            .sort("price", SortOrder.DESC);
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    handleResponse(response);
}

6. 高亮

@Test
void testHighLight() throws IOException {
    SearchRequest request = new SearchRequest("hotel");
    request.source().query(QueryBuilders.matchQuery("all", "如家"))
            .highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    handleResponse(response);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++核心编程之类和对象---C++面向对象的三大特性--封装

目录 类和对象 类和对象的概念 C面向对象的三大特性 一、封装 封装案例1&#xff1a;设计一个学生类&#xff0c;可以给姓名和学号赋值&#xff0c;可以显示学生的姓名和学号。 二、访问权限 访问权限有三种 struct和class的区别 三、成员属性私有化 成员属性私有化的…

第十三章总结

一.泛型 1.定义泛型类 泛型机制语法&#xff1a; 类名<T> 其中&#xff0c;T是泛型的名称&#xff0c;代表某一种类型。 【例13.6】创建带泛型的图书类 代码&#xff1a; 结果&#xff1a; 2.泛型的常规用法 (1)定义泛型类时声明多个变量 class MyCla…

【MySQL集群一】CentOS 7上搭建MySQL集群:一主一从、多主多从

CentOS 7上搭建MySQL集群 介绍一主一从步骤1&#xff1a;准备工作步骤2&#xff1a;安装MySQL步骤3&#xff1a;配置主服务器步骤4&#xff1a;创建复制用户步骤5&#xff1a;备份主服务器数据&#xff0c;如果没有数据则省略这一步步骤6&#xff1a;配置从服务器步骤7&#xf…

Javase | 集合-上

目录&#xff1a; 一、集合&#xff1a;1.集合的概述2.集合的分类 二、“单个方式”存储元素&#xff1a;1.Collection1.1 Collection的概述1.2 Collection接口中常用的方法Iterator<T> iterator( ) 1.3 Collection下的子接口 2.Iterable&#xff1a;2.1 Iterable的概述2…

国内AI语言大模型【星火】各类模块及部分功能使用方法介绍

一、前言 现在AI语言大模型是百花齐放,挺好!有竞争,有发展,才能推出更好的产品。现在,科大讯飞就推出了大语言模型——星火!能够学习和理解人类的语言,进行多轮对话,回答问题,高效便捷地帮助人们获取信息、知识和灵感。星火在对话栏设置了三个插件:文档回答、PPT生成…

Java中transient关键字的详细总结

Java中transient关键字的详细总结 概要介绍 本文要介绍的是Java中的transient关键字&#xff0c;transient是短暂的意思。对于transient 修饰的成员变量&#xff0c;在类的实例对象的序列化处理过程中会被忽略。 因此&#xff0c;transient变量不会贯穿对象的序列化和反序列化…

C2基础设施威胁情报对抗策略

威胁情报是指在信息安全和安全防御领域&#xff0c;收集、分析和解释与潜在威胁相关的信息&#xff0c;以便预先发现并评估可能对组织资产造成损害的潜在威胁&#xff0c;是一种多维度、综合性的方法&#xff0c;其通过信息的收集、分析和研判&#xff0c;帮助组织了解可能对其…

Linux学习第11天:字符设备驱动开发:一字一符总见情

本文是驱动开发的第一篇笔记。主要内容是字符设备驱动开发最基础的内容&#xff0c;主要包括字符设备的概念、开发步骤以及一个十分重要的概念&#xff1a;设备号。其思维导图能简单的显示本文的基本框架&#xff0c;如下&#xff1a; 一、字符设备 字符设备就是一个一个字节&a…

MySQL注入绕安全狗脚本 -- MySQLByPassForSafeDog,以及端口爆破工具 -- PortBrute配置使用

工具介绍 此Tamper仅仅适用于MySQL数据库&#xff0c;在SQLMap使用过程中添加参数–tamperMySQLByPassForSafeDog。 安装与使用 1、安装网站安全狗Apache最新版 2、启用安全狗&#xff0c;不加MySQLByPassForSafeDog绕狗Tamper: python sqlmap.py -u "http://192.168.…

又一个Python调试利器

迷途小书童 读完需要 5分钟 速读仅需 2 分钟 1 简介 在编程过程中&#xff0c;几乎难以避免的会出现错误。事实上&#xff0c;程序员为了消除错误&#xff0c;要花费大量的时间在代码调试上。在调试过程中&#xff0c;使用 print() 语句来理解程序流程和发现意外行为无疑是最常…

iOS系统暗黑模式

系统暗黑模式&#xff1a; 暗黑模式颜色适配&#xff1a; 方式1&#xff1a; Assets配置&#xff1a;在Assets中配置好颜色后&#xff0c;可以通过colorNamed: 放大获取到动态颜色。 方式2&#xff1a;代码配置&#xff0c;通过代码colorWithDynamicProvider: 可以看出来生成…

C语言指针进阶(2)

大家好&#xff0c;我们今天继续来分享指针进阶的内容。 目录 5.函数指针 6.函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 5.函数指针 顾名思义函数指针里面存的就是函数的地址了。 那我们通过一段代码来理解函数指针&#xff1a; #include<stdio.h> int Add…

向日葵无法连接服务器(无法登录)

最近在使用向日葵过程中&#xff0c;突然就不能登录向日葵了&#xff0c;网上查了各种解决方案&#xff0c;比如说防火墙是不是把向日葵给拦截了&#xff1f;更换不同的版本等等&#xff0c;都无法解决&#xff0c;最后突然想到是不是电脑对向日葵原安装目录限制了&#xff1f;…

创建表

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 创建表 语法格式: create table 表名(列名1 数据类型,列名2 数据类型,... ,列名n, 数据类型 ); 练习:在czwbkl库中,创建一格test01表 跟大家说…

windows下C++的反射功能

概述 c/c如果在日志中查看某个结构体/类的每个变量名&#xff0c;变量值信息&#xff0c;只能通过printf逐个格式化&#xff0c;非常繁琐&#xff0c;如何做到类似protobuff转json的序列化功能呢&#xff1f;该dll库先通过分析pdb文件获取结构体/类的变量名称、变量地址&#…

WebGL 从0到1绘制一个立方体

目录 前言 组成立方体的面、三角形、顶点坐标和顶点颜色 通过顶点索引绘制物体 gl.drawElements(mode, count, type, offset) 函数规范 示例程序 彩色立方体&#xff08;HelloCube.js&#xff09; 代码详解 向缓冲区中写入顶点的坐标、颜色与索引 gl.ELEMENT_ARRAY_B…

RFID产线自动化升级改造管理方案

应用背景 在现代制造业中&#xff0c;产线管理是实现高效生产和优质产品的关键环节&#xff0c;产线管理涉及到生产过程的监控、物料管理、工艺控制、质量追溯等多个方面&#xff0c;有效的产线管理可以提高生产效率、降低成本、改善产品质量&#xff0c;并满足市场需求的变化…

elasticsearch1

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

iText实战--在现有PDF上工作

6.1 使用PdfReader读取PDF 检索文档和页面信息 D:/data/iText/inAction/chapter03/image_direct.pdf Number of pages: 1 Size of page 1: [0.0,0.0,283.0,416.0] Rotation of page 1: 0 Page size with rotation of page 1: Rectangle: 283.0x416.0 (rot: 0 degrees) Is reb…

重新认识架构—不只是软件设计

前言 什么是架构&#xff1f; 通常情况下&#xff0c;人们对架构的认知仅限于在软件工程中的定义&#xff1a;架构主要指软件系统的结构设计&#xff0c;比如常见的SOLID准则、DDD架构。一个良好的软件架构可以帮助团队更有效地进行软件开发&#xff0c;降低维护成本&#xff0…