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的索引,它为titlebody字段建立了全文搜索能力,并且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);
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

结果解析与展示

搜索结果通常包含多个字段,如文档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的不断发展,未来可能会有更多方便的客户端库出现,进一步简化集成过程。

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

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

相关文章

300V直流充电桩测试有哪些实验项目

300V直流充电桩测试的实验项目主要包括以下几个方面&#xff1a; 1. 电气性能测试&#xff1a; - 输入电压范围测试&#xff1a;检查充电桩在不同输入电压下的正常工作情况。 - 输出电压范围测试&#xff1a;检查充电桩在不同输出电压下的正常工作情况。 - 输出电流范围测试…

MySQL#MySql数据库的操作

目录 一、创建数据库 二、字符集和校验规则 1.查看系统默认字符集以及校验规则 2.查看数据库支持的字符集 3.查看数据库支持的字符集校验规则 4.校验规则对数据库的影响 1.以UTF-8格式创建数据库 2.不区分大小写 3.区分大小写 4 大小写对数据库的影响 三、操纵数据…

动态规划专训6——回文串系列

动态规划题目中&#xff0c;常出现回文串相关问题&#xff0c;这里单独挑出来训练 1.回文子串 LCR 020. 回文子串 给定一个字符串 s &#xff0c;请计算这个字符串中有多少个回文子字符串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0…

流程:采集1688店铺内有成交的商品列表||1688商品订单列表+订单详情API接口

此API目前支持以下基本接口&#xff1a; item_get 获得1688商品详情item_search 按关键字搜索商品item_search_img 按图搜索1688商品&#xff08;拍立淘&#xff09;item_search_suggest 获得搜索词推荐item_fee 获得商品快递费用seller_info 获得店铺详情item_search_shop 获得…

沃伦·巴菲特将AI比做原子弹:“瓶中精灵”使诈骗成为最快增长产业|TodayAI

在伯克希尔哈撒韦公司的年度股东大会上&#xff0c;投资大师沃伦巴菲特对人工智能的未来提出了严重警告。巴菲特对这项可以模拟现实并产生误导性内容的技术表示担忧&#xff0c;他认为这将成为史上增长最快的行业之一。 巴菲特在会上说&#xff1a;“当你思考诈骗人们的潜力时…

【嵌入式DIY实例】-蓝牙控制小车

DIY蓝牙控制小车 文章目录 DIY蓝牙控制小车1、硬件准备与接线2、控制指令设计3、代码实现在本文中,将演示如何通过蓝牙来控制一个4轮小车。控制指令由Android智能手机下发。在应用中,可以通过前进、后退、向右、向左、停止等命令来操作它。 此外,它还有一些额外的功能,如前…

NCBI GEO王炸:GEO2R直接分析RNA-seq数据,几家欢喜几家愁?

GEO2R是NCBI GEO团队针对上传到GEO的芯片数据开发的一款在线差异分析、可视化作图工具&#xff0c;是广大数据分析人员的福音。然而&#xff0c;一直以来GEO2R仅针对芯片数据&#xff0c;对于越来越多的测序数据&#xff0c;只能下载所上传的matrix矩阵&#xff0c;进行分析&am…

ENZO:Insulin(胰岛素)ELISA kit

胰岛素是一种由胰岛β细胞合成分泌的肽类激素。它促进葡萄糖从血液中吸收到组织中&#xff0c;并以糖原和脂肪的形式储存起来&#xff1b;此外胰岛素还抑制肝脏产生葡萄糖。通过控制葡萄糖水平&#xff0c;胰岛素成为脂肪和碳水化合物代谢的调节器。当由于缺乏胰岛素分泌而失去…

成都最大视听产业园更新数字影像创作空间,影像技术打造沉浸式体验

国际数字影像产业园&#xff0c;位于成都金牛区的心脏地带&#xff0c;借助数字影视制作技术的力量&#xff0c;努力“破墙而出”&#xff0c;耕耘数字影像技术研发和创新创作的热土。 随着科技的飞速发展&#xff0c;数字影像已经成为成都文创产业的重要组成部分。为了满足国际…

航天系统工程介绍

01 什么是系统工程 系统工程&#xff08;SE&#xff09;是一个视角、一个流程、一门专业&#xff0c;正如以下三种代表性定义所阐明&#xff1a; 系统工程是一种使系统能成功实现的跨学科的方法和手段。系统工程专注于&#xff1a;在开发周期的早期阶段定义客观需要与所要求的…

Docker 容器日志占用空间过大解决办法

1、vi /etc/docker/daemon.json {"log-driver":"json-file","log-opts": {"max-size":"200m", "max-file":"1"} } 2、重新加载守护进程配置文件 systemctl daemon-reload 3、重启docker systemctl…

【考研数学】只做《1800》和真题,能不能考90分?

网上的经验贴推荐的习题册&#xff0c;说自己刷完以后最后考了130 你以为自己也能和大佬一样&#xff0c;刷完数学也能考那么高 但实际上很多人是1800、660、880刷题刷下来最后考了四五十的 他们也不会在网上说 刷题多少&#xff0c;或者是刷哪一本习题册并不能衡量你最后能…

实力登榜!蓝卓入选2024中国未来独角兽TOP100企业

日前&#xff0c;由民建中央、中国科协指导&#xff0c;民建浙江省委会、中国投资发展促进会联合主办的第八届万物生长大会中国未来独角兽大会在杭州举办。 会上&#xff0c;《2024中国未来独角兽TOP100榜单》隆重揭晓。其中&#xff0c;蓝卓在全国参评企业中脱颖而出&#xff…

c语言结构体指针定义

struct stu_t *dev, *brother_dev;struct stu_t *dev, brother_dev; 这两行代码看起来是C或C的代码片段&#xff0c;它们定义了两个名为dev和brother_dev的变量&#xff0c;其类型为 struct stu_t 的指针。 下面是每行代码的描述&#xff1a; struct stu_t *dev, *brother_de…

一、ESP32基础知识

1、乐鑫产品线 系列特点ESP8266无ESP32无ESP32-S2无ESP32-C3无ESP32-S3无ESP32-C2/ESP8684无ESP32-C6无ESP32-H2无 2、开发方式 2.1、ESP-IDF (1)面向专业开发者。乐鑫官方开发框架&#xff0c;专门为ESP32系列芯片设计。支持C/C语言&#xff0c;并提供一套完整的API&#…

c语言排序算法之七(希尔排序)

前言 以下内容是被验证可以有效理解希尔排序&#xff0c;代码也较容易理解。如果你发现还有很多需要增加的&#xff0c;欢迎留言。 为什么要单独写排序算法这一系列&#xff0c;看过一些贴子普遍篇幅较长。看完还依旧云里雾里&#xff0c;难以直观理解原理及整个过程。代码永…

RK3568 学习笔记 : 精简 u-boot env 默认复杂的多种引导启动设置

前言 环境&#xff1a; 正点原子 Atompi-CA1 RK3568 开发板、正点原子 DLRK3568 开发板&#xff0c;&#xff08;一时脑热买了两块 RK3568 开发板&#xff09;&#xff0c;Atompi-CA1 RK3568 开发板比较小巧&#xff0c;利于一些前期的嵌入式 Linux 开发学习与实践。 RK3568 开…

VGA项目:联合精简帧+双fifo+sobel算法 实现VGA显示(未完)

前言&#xff1a;该项目实际上是在很多基础的小练习上合成起来的&#xff0c;例如涉及到uart&#xff08;rs232&#xff09;的数据传输、双fifo流水线操作、VGA图像显示&#xff0c;本次内容在此基础上又增添了sobel算法&#xff0c;能实现图像的边沿监测并VGA显示。 文章目录…

假期的最后一天...

今天是假期最后一天&#xff0c;这个假期我也跑了不少高速&#xff0c;说实话&#xff0c;看到了梅大高速塌方事故&#xff0c;心情一直不是滋味... 我就在思考&#xff0c;我们究竟在追求什么&#xff1f; 有人说生命是脆弱的&#xff0c;也有人说生命是顽强的&#xff0c;是呀…

【C++风云录】科学可视化与数据分析:从特性探索到高级应用实践

科技赋能&#xff1a;六大工具助力你的职业生涯 前言 在本文中&#xff0c;我们将对六种广泛使用的计算机视觉和图形库进行深入介绍&#xff0c;这些库包括VTK、D3.js、OpenCV、Eigen、Boost和PCL。每个章节都会包含库的基本介绍&#xff0c;系统要求&#xff0c;安装和配置过…