Java中使用RediSearch进行高效数据检索
RediSearch是一款构建在Redis上的搜索引擎,它为Redis数据库提供了全文搜索、排序、过滤和聚合等高级查询功能。通过RediSearch,开发者能够在Redis中实现复杂的数据搜索需求,而无需依赖外部搜索引擎。本文将介绍如何在Java应用中集成并使用RediSearch,以实现高效的数据检索功能。
环境准备
1. 安装Redis与RediSearch
首先,确保你已经安装了 Redis 并启动了 RediSearch 模块。你可以通过编译安装 RediSearch 源代码,或者使用一些 Redis 发行版(如 Redis Enterprise)提供的 RediSearch 模块来安装。安装完成后,启动 Redis 服务器,并加载 RediSearch 模块。可以参考文章RediSearch:Redis强大的搜索引擎-CSDN博客中的安装步骤。
2. 添加Java依赖
在你的Java项目中,添加Jedis客户端库以及用于操作RediSearch的依赖。如果你使用Maven,可以在pom.xml文件中添加如下依赖:
<dependencies><dependency><groupId>com.redislabs</groupId><artifactId>jredisearch</artifactId><version>1.8.1</version></dependency>
</dependencies>
这里我们使用Jedis来执行RediSearch的相关命令。
创建索引
首先我们从创建一个索引开始。下面是一个使用Jedis创建索引的例子:
import redis.clients.jedis.Jedis;public class RediSearchExample {public static void main(String[] args) {Client client = new Client("index", "localhost", 6379);Schema schema = new Schema().addTextField("title", 5.0).addTextField("body", 1.0).addNumericField("star");// 添加索引client.createIndex(schema, Client.IndexOptions.defaultOptions());}
}
在这段代码中,创建了一个名为index的索引,它为title和body字段建立了全文搜索能力,并且title字段在搜索时的权重更高。
插入文档
接下来,向索引中插入文档(数据):
public static void insertDocument(Client client) {// 添加文档Map<String, Object> fields = new HashMap<>();fields.put("title", "标题");fields.put("body", "内容");fields.put("star", 100);client.addDocument("doc1", fields);
}
执行搜索
现在,我们可以执行全文搜索了:
public static void search(Client client) {// 查询文档Query query = new Query("标题").addFilter(new Query.NumericFilter("star", 0, 1500)).setLanguage("chinese").setWithScores();SearchResult result = client.search(query);// 处理结果...
}
search方法执行一个简单的全文搜索,其中query是你要搜索的关键词。返回的结果列表包含了匹配的文档ID以及其他相关信息,你可以根据需要解析这些结果。
排序与分页
public SearchResult searchWithSortAndPage(Client client) {Query query = new Query("标题").addFilter(new Query.NumericFilter("star", 0, 1500)).setWithScores().setLanguage("chinese").limit(0, 10).setSortBy("star", true);SearchResult result = client.search(query);return result;
}
删除文档
public void deleteDoc(Client client, String docId) {client.deleteDocument(docId);
}
结果解析与展示
搜索结果通常包含多个字段,如文档ID(_id)、评分(_score)以及可能的其他元数据。你可以遍历results列表并解析这些信息
List<Map<String, String>> parseSearchResults(List<Object> rawResults) {List<Map<String, String>> parsedResults = new ArrayList<>();for (int i = 1; i < rawResults.size(); i++) {List<Object> docInfo = (List<Object>) rawResults.get(i);Map<String, String> docMap = new HashMap<>();for (int j = 0; j < docInfo.size(); j += 2) {docMap.put(docInfo.get(j).toString(), docInfo.get(j + 1).toString());}parsedResults.add(docMap);}return parsedResults;
}
总结
通过上述步骤,我们展示了如何在Java应用程序中集成并使用RediSearch进行全文搜索。通过直接使用Jedis执行RediSearch命令,能够充分利用其强大的搜索功能。随着RediSearch的不断发展,未来可能会有更多方便的客户端库出现,进一步简化集成过程。
相关文章:
Java中使用RediSearch进行高效数据检索
RediSearch是一款构建在Redis上的搜索引擎,它为Redis数据库提供了全文搜索、排序、过滤和聚合等高级查询功能。通过RediSearch,开发者能够在Redis中实现复杂的数据搜索需求,而无需依赖外部搜索引擎。本文将介绍如何在Java应用中集成并使用Red…...
NASA数据集——全球土壤顶部 1 厘米土壤湿度的网格估算值25km分辨率
AMSR-E/Aqua L2B Surface Soil Moisture, Ancillary Parms, & QC EASE-Grids V003 简介 该数据集包含土壤顶部 1 厘米土壤湿度的网格估算值,是 AMSR-E 检索足迹的平均值。土壤湿度是通过 AMSR-E/Aqua L2A亮度温度(Tb)测量值估算的&…...
翼支付——风控场景中图模型的范式变迁
目录 风控图深度学习模型 风控图大模型...
Edge视频增强功能
edge://flags/#edge-video-super-resolution 搜索Video查找 Microsoft Video Super Resolution 设置为Enabled...
C++ 概览并发
并发 资源管理 资源 程序中符合先获取后释放(显式或隐式)规律的东西,比如内存、锁、套接字、线程句柄和文件句柄等。RAII: (Resource Acquisition Is Initialization),也称为“资源获取就是初始化”,是C语言的一种管…...
04-19 周四 GitHub CI 方案设计
04-19 周四 GitHub CI 方案设计 时间版本修改人描述2024年4月19日14:44:23V0.1宋全恒新建文档2024年4月19日17:22:57V1.0宋全恒完成部署拓扑结构的绘制和文档撰写 简介 需求 由于团队最近把代码托管在GitHub上,为解决推理、应用的自动化CI的需要,调研了…...
java日常选择题
题目来自牛客网 1.以下哪个接口的定义是正确的?() A interface B { void print() {} ;} B interface B { static void print();} C.abstract interface B extends A1, A2 //A1、A2为已定义的接口 {abstract void print(){};} D.interface B { void print(); 选D,因…...
安卓串口通訊三
核心代碼如下: package com.example.comandroid;import static android.content.ContentValues.TAG;import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;import…...
嵌入式交叉编译:Unable to find arm_neon.h
找到文件 搜索了一下,具体目录是: /opt/linux/x86-arm/aarch64-mix210-linux/lib/gcc/aarch64-linux-gnu/7.3.0/include/arm_neon.h 解决办法 INC_ARM/opt/linux/x86-arm/aarch64-mix210-linux/lib/gcc/aarch64-linux-gnu/7.3.0/include./configure …...
Linux下工具tc详细讲解及限制IP和端口实例
首先纠正某一篇博客,TC并不是只管发包不管收包,之前我也很纳闷 知道最后看到了14年前一位大佬的帖子。是ingress! 这里有个非常重要的点就是ingress,如果父类不是他的话是完不成限制源IP的,这个关键词表明你正在添加一个入口队列规…...
Java | Leetcode Java题解之第73题矩阵置零
题目: 题解: class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean flagCol0 false;for (int i 0; i < m; i) {if (matrix[i][0] 0) {flagCol0 true;}for (int j 1; j < n; j) {if (…...
MySQL#MySql表的操作
目录 一、创建表 二、查看表结构 三、修改表 1.修改表的名字 2.新增一个列 3.修改列 4.删除列 5.修改列的名称 四、删除表 一、创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校…...
git修改版本发布时间
一、场景 发现git版本发布时,服务器时间有误,需要修改。 二、解决 (1)准备 时间戳转换网址:http://shijianchuo.wiicha.com/ (2)SQLite 数据库 连接到安装git的服务器,修改版本表…...
【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计
前言 从今天开始,我们详解介绍制作实时天气时钟项目的方法步骤,主要分以下几个专题分别进行:(1)连接点亮SPI-TFT屏幕和UI布局设计;(2)NodeMCU的WIFI模式设置及连接;&…...
国内首发 | CSA大中华区启动《AI安全产业图谱(2024)》调研
在人工智能(AI)技术的快速发展浪潮中,AI安全已成为全球关注的焦点。为应对AI安全带来的挑战,确保AI技术的健康发展,全球范围内的研究机构、企业和技术社区都在积极探索解决方案。 在这一背景下,CSA大中华区…...
web页面与原生android通信,调用原生android方法
注册初始化方法JsBridge //JS注册事件监听 function connectWebViewJavascriptBridge(callback) {if (window.WebViewJavascriptBridge) {callback(WebViewJavascriptBridge)} else {document.addEventListener(WebViewJavascriptBridgeReady,function() {callback(WebViewJav…...
Linux的编译器
程序编译的过程 程序的编译过程是将源代码转换为可执行文件的一系列步骤。这个过程涉及多个阶段,主要包括预处理、编译、汇编和链接。下面详细介绍每个阶段: 1. 预处理(Preprocessing) 在实际编译之前,源代码文件首…...
redis--安装
简介 官网:RedisInsight - The Best Redis GUI 各个版本官网下载地址:http://download.redis.io/releases/ Redis和Memcached是非关系型数据库也称为NoSQL数据库,MySQL、Mariadb、SQL Server、PostgreSQL Oracle 数据库属于关系型数据 应用…...
魔法程序员的奥妙指南:Java基本语法
作为一名魔法程序员,精通Java语言是至关重要的。Java作为一种强大的编程语言,在编写优质代码和开发强大应用程序时发挥着重要作用。让我们深入探讨Java基本语法的关键要点,从注释到变量,无所不包! Java基本语法的神秘魔…...
SpringMVC传递参数
1.RequestMapping RequestMapping本身可以处理,get或post,指定了get或post之后,就只能处理对应的请求。 RequestMapping(value{"haihiyo","goodMoring"},methodRequestMethod.POST)2.RestFul风格 RestFul是一种风格 比如:网站的访…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
