谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存

news2025/1/24 17:54:34

文章目录

  • 一,谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存
    • 1,在Elasticsearch的配置类中增加通用设置
    • 2,索引数据
    • 3,验证

一,谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存

1,在Elasticsearch的配置类中增加通用设置

在这里插入图片描述

public static final RequestOptions COMMON_OPTIONS;
    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        // builder.addHeader("Authorization", "Bearer " + TOKEN);
        // builder.setHttpAsyncResponseConsumerFactory(
        //         new HttpAsyncResponseConsumerFactory
        //                 .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }

这段代码的主要作用是:

  • 配置客户端请求时携带的认证信息(如认证令牌)。
  • 定义了客户端处理大文件响应的方式,通过设置一个较大的缓冲区大小。

这些配置选项将在后续使用Elasticsearch客户端执行请求时被应用,比如在后面代码片段中 restHighLevelClient.index(request, COMMON_OPTIONS),其中 COMMON_OPTIONS 被用作请求选项传递给客户端。这样,每次发送请求时都会自动包含这些设置,无需每次都手动配置。

2,索引数据

	
    public void indexData() throws IOException {
        IndexRequest request = new IndexRequest("users");
        request.id("1");   //数据的id

        User user = new User();
        user.setName("zhangsan");
        user.setAge(18);
        user.setGender("男");

        String jsonString = JSON.toJSONString(user);
        request.source(jsonString, XContentType.JSON);

        IndexResponse index = restHighLevelClient.index(request, GulimallElasticSearchConfig.COMMON_OPTIONS);
        System.out.println(index);

    }

	
    class User {
        String name;
        int age;
        String gender;

        String json() {
            return JSON.toJSONString(this);
        }
    }

这段Java代码使用了Elasticsearch的REST High-Level Client来索引(存储)一条文档到Elasticsearch中。

  1. IndexRequest request = new IndexRequest("users");

    • 创建一个IndexRequest对象,该对象指定要将数据索引到名为"users"的索引中。
  2. request.id("1");

    • 设置索引请求中的文档ID为"1"。在Elasticsearch中,每个文档都有一个唯一标识符(ID),用于标识和检索文档。
  3. String jsonString = JSON.toJSONString(user);

    • 使用JSON库(例如Jackson或fastjson)将User对象转换为JSON格式的字符串。这里假设使用的是fastjson库。

4 request.source(jsonString, XContentType.JSON);

  • 将JSON字符串设置为IndexRequest的源数据,并指明内容类型为JSON。
  1. IndexResponse index = restHighLevelClient.index(request, GulimallElasticSearchConfig.COMMON_OPTIONS);
    • 使用REST High-Level Client执行索引操作。restHighLevelClient是Elasticsearch客户端实例,通过它发送索引请求。GulimallElasticSearchConfig.COMMON_OPTIONS是一个配置选项,通常用于设置请求的超时和其他参数。

这段代码执行完成后,会在Elasticsearch的users索引中创建一个ID为1的文档,包含用户的名字、年龄和性别信息。

3,验证

保存完成后,Kibana中可以查询到这条文档。

GET users/_search

在这里插入图片描述
也可以使用Java Api进行验证。

import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.ElasticsearchException;

// 假设 restHighLevelClient 已经初始化好了
RestHighLevelClient client = restHighLevelClient;

// 创建一个GetRequest
GetRequest getRequest = new GetRequest("users", "1");

// 执行GET请求
try {
    GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
    
    // 检查文档是否存在
    if (getResponse.isExists()) {
        // 获取文档的源数据
        String jsonString = getResponse.getSourceAsString();
        System.out.println("Document source: " + jsonString);
        
        // 如果你想解析JSON并获取特定字段,可以使用JSON库
        User user = JSON.parseObject(jsonString, User.class);
        System.out.println("Name: " + user.getName());
        System.out.println("Age: " + user.getAge());
        System.out.println("Gender: " + user.getGender());
    } else {
        System.out.println("Document not found.");
    }
} catch (ElasticsearchException e) {
    System.err.println("Error getting document: " + e.getMessage());
} catch (IOException e) {
    System.err.println("IO error getting document: " + e.getMessage());
}

要验证文档是否已成功保存到Elasticsearch中,你可以使用Elasticsearch客户端执行GET请求来检索该文档。以下是一个简单的示例,说明如何使用REST High-Level Client检索刚刚索引的文档。

首先,你需要确保你有客户端实例 restHighLevelClient 可用,并且已经定义了 COMMON_OPTIONS。然后,你可以使用以下代码来获取文档:

import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.ElasticsearchException;

// 假设 restHighLevelClient 已经初始化好了
RestHighLevelClient client = restHighLevelClient;

// 创建一个GetRequest
GetRequest getRequest = new GetRequest("users", "1");

// 执行GET请求
try {
    GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
    
    // 检查文档是否存在
    if (getResponse.isExists()) {
        // 获取文档的源数据
        String jsonString = getResponse.getSourceAsString();
        System.out.println("Document source: " + jsonString);
        
        // 如果你想解析JSON并获取特定字段,可以使用JSON库
        User user = JSON.parseObject(jsonString, User.class);
        System.out.println("Name: " + user.getName());
        System.out.println("Age: " + user.getAge());
        System.out.println("Gender: " + user.getGender());
    } else {
        System.out.println("Document not found.");
    }
} catch (ElasticsearchException e) {
    System.err.println("Error getting document: " + e.getMessage());
} catch (IOException e) {
    System.err.println("IO error getting document: " + e.getMessage());
}
  1. 创建GetRequest:

    • 使用 new GetRequest("users", "1") 创建一个 GetRequest 对象,其中 "users" 是索引名称,"1" 是文档的ID。
  2. 执行GET请求:

    • 使用 client.get(getRequest, RequestOptions.DEFAULT) 发送GET请求。在这里我们使用了默认的 RequestOptions,如果你之前定义了自定义的 RequestOptions,你可以将 RequestOptions.DEFAULT 替换为 COMMON_OPTIONS
  3. 处理响应:

    • getResponse.isExists() 检查文档是否存在。
    • getResponse.getSourceAsString() 获取文档的源数据作为字符串。
    • 使用JSON库(例如Jackson或fastjson)将字符串反序列化为 User 对象,以便于进一步处理。

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

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

相关文章

环境搭建:全面详尽的 MongoDB Shell MongoDB Server介绍、安装、验证与配置指南(以 Windows 系统为主)

环境搭建:全面详尽的 MongoDB Shell & MongoDB Server介绍、安装、验证与配置指南(以 Windows 系统为主) MongoDB 是一个基于文档的 NoSQL 数据库,以其高性能、灵活性和可扩展性而受到广泛欢迎。本文将带您完成 MongoDB 的安装…

数据结构第十讲:二叉树OJ题

数据结构第十讲:二叉树OJ题 1.单值二叉树2.相同的树3.对称二叉树4. 另一棵树的子树5.二叉树的前序遍历6.二叉树的中序遍历7.二叉树的后序遍历8.二叉树的构建及其遍历9.二叉树选择题9.1二叉树性质19.2二叉树性质29.3二叉树性质三9.4选择题 1.单值二叉树 链接: OJ题链…

Java-----二叉树

1.树型结构 1.1概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 1.有…

本地文件上传

java本地文件上传 1、FileController /*** author: yc* des: 文件接口* date: 2024/8/4 11:11*/ RestController RequestMapping("/file") public class FileController {Resourceprivate FileService fileService;PostMapping("/upload")public Respon…

智能交通(6)——DQN代码复现

伪代码 如算法描述,dqn即深度q网络和记忆池 初始化记忆池和可以容纳的数量N 动作价值函数Q使用随机权重进行初始化。 目标动作价值函数Q′也使用相同的权重进行初始化,即Q′Q。 循环训练M局 初始化和预处理观察到的状态 每局循环训练T步 采用e的概…

【Scene Transformer】scene transformer论文阅读笔记

文章目录 序言(Abstract)(Introduction)(Related Work)(Methods)(Scene-centric Representation for Agents and Road Graphs)(Encoding Transformer)(Predicting Probabilities for Each Futures)(Joint and Marginal Loss Formulation) (Results)(Discussion)(Questions) sce…

Linux|最佳命令行下载加速器

引言 无论是远程工作还是本地工作,我们经常需要从外部获取信息。在没有其他选择的情况下,使用命令行工具来获取这些信息是一个不错的选择。 本文[1]将介绍一些通过命令行下载内容时最常使用的工具。 Wget 我们首先介绍一个广受欢迎的工具 wget。它是一个…

使用Qt编译modbus

一.编译库文件 1. 创建library项目 2. 选择要配置的编译器 3. 把自动生成的源码都移除:(右键单击,选择 remove) 4 4. 导入库源码 把源码拷贝到项目目录下(.pro 文件所在的目录) 5. 修改 configure.js 文…

(计算机网络)物理层

目录 一.基本概念 二.基本术语 三.码元 四.多路复用技术 一.基本概念 1. 2. 3. 4. 5. 6. 7. 8. 9. 二.基本术语 1. 2. 3.早期--公用的电话网传输数据,网络上传的是模拟信号,调制解调器--将数字信号转化成模拟信号,最后,调制解…

Java: 线程安全问题的解决方案(synchronized)

发生原因 要想解决线程安全问题,那么我们首先得知道线程安全问题为什么会发生. 发生原因: 线程在操作系统中是"随机调度,抢占式执行的"[根本原因].多个线程,同时修改同一个变量修改操作不是"原子"的内存可见性问题指令重排序 解决方案 原因1和2,我们很…

htsjdk库FeatureCodec和Feature接口介绍

在 HTSJDK 库中,FeatureCodec 接口和 Feature 接口分别扮演不同的角色,用于处理基因组数据的不同方面。下面是这两个接口的区别和各自的功能: FeatureCodec 接口 主要功能 编码和解码:FeatureCodec 接口的主要职责是定义如何将数据从文件格式解码为 Java 对象(即 Featur…

【C语言】分支与循环(循环篇)——结尾猜数字游戏实现

前言 C语言是一种结构化的计算机语言,这里指的通常是顺序结构、选择结构、循环结构,掌握这三种结构之后我们就可以解决大多数问题。 分支结构可以使用if、switch来实现,而循环可以使用for、while、do while来实现。 1. while循环 C语言中…

[CP_AUTOSAR]_系统服务_DEM模块(三)功能规范之诊断事件定义

目录 1、诊断事件定义1.1、Event priority(事件优先级)1.2、Event occurrence(事件发生计数器)1.3、Event kind(事件类别)1.4、Event destination(故障内存)1.5、Diagnostic monitor…

2.MonggoDB是什么?

1. 不是什么? 要想知道MongoDB是什么,我们得先搞清楚它不是什么,首先它不是关系数据,不是像下面这样这种格式存储数据。 这个图展示了关系型数据库的常用存储方式,一个表格,里面存储了多行记录&#xff0…

Linux系统中的两个核心进程:`init`和`kthreadd`

文章目录 1 init 进程1.1 基本信息1.2 主要功能1.3 示例 2 kthreadd 进程2.1 基本信息2.2 主要功能2.3 示例 3 对比总结4 用户空间进程与内核线程4.1 用户空间进程特点 4.2 内核线程特点 5 对比总结6 结论参考链接封面 本文详细对比了Linux系统中的两个核心进程: i…

nvm 对node版本的控制

使用nvm切换Node.js版本的步骤如下 nvm list available // 显示可以安装的所有node.js的版本 如果出现空白 问题解决 经过查找nvm的文档,发现,对于中国用户而言,可以切换nodejs或npm的镜像地址来访问: nvm node_mirror https:…

软raid - - udev规则

一、什么是udev FROM AI: udev是Linux 2.6内核及以后版本中引入的一个设备管理框架,它取代了之前的devfs系统。udev以守护进程的形式运行,并且工作在用户空间而不是内核空间。它的主要功能是动态地创建和管理/dev目录下的设备节点,并且能够根…

SAP支出管理,企业成本控制的智能钥匙

在企业运营中,有效的支出管理是确保财务健康和提升竞争力的关键。SAP支出管理系统作为企业资源规划的核心组成部分,提供了一套全面的解决方案,帮助企业实现成本控制、风险管理和合规性监督。实现支出管理流程自动化,并主动管理更多…

蚂蚁笔试0511-编程题

解题思路: 记录0、正数、负数的个数,分类讨论。 解题思路: 有n个位置,每个位置有m个数,所以一共有m^n种情况,每种情况至少包含权值1,也就是全相等是一段,或者说是一个数形成的 从第二…

黑马Java零基础视频教程精华部分_11_面向对象进阶(3)

系列文章目录 文章目录 系列文章目录一、抽象类1、为什么要有抽象类?2、抽象方法3、抽象类4、抽象类和抽象方法定义格式5、注意事项 二、接口1、为什么会有接口?2、接口和抽象类的异同3、接口的定义和使用4、接口中成员的特点5、接口和类之间的关系6、实…