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是一种风格 比如:网站的访…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
