从Elasticsearch到RedisSearch:探索更快的搜索引擎解决方案

文章目录

    • RedisSearch 的关键功能
    • 与 ElasticSearch 对比
      • 性能对比
      • 产品对比
    • 如何使用 Docker 安装 RedisSearch
      • 1. 获取 RedisSearch Docker 镜像
      • 2. 启动 RedisSearch 容器
      • 3. 验证安装
    • RedisSearch 使用示例
      • 1. 连接到 RedisSearch
      • 2. 创建索引
      • 3. 添加文档
      • 4. 执行搜索
        • 搜索所有包含 "Redisearch" 的文档:
        • 搜索标题包含 "Docker" 的文档
        • 搜索包含 "Docker" 的文档,只返回 `title` 和 `url` 字段
      • 使用排序
      • 删除文档和索引
        • 删除文档
        • 删除索引
      • 聚合查询
      • 同义词设置
    • 总结


最近开始公众号文章也开始同步更新了,对Java、大数据、人工智能、开发运维相关技术分享,文章对您有用的话,辛苦您也关注下公众号,感谢!


RedisSearch 是 Redis 的一个强大模块,提供了全文搜索和二级索引功能,帮助用户在 Redis 中进行复杂的搜索和过滤操作。无论是文本搜索、结构化查询,还是自动补全等功能,RedisSearch 都为需要实时搜索功能的应用提供了理想的解决方案。

RediSearch GitHub:https://github.com/RediSearch/RediSearch

image-852132808978

RedisSearch 的关键功能

  1. 全文搜索:支持复杂的查询,包括短语搜索、布尔逻辑、同义词扩展等。
  2. 结构化查询:可对文档中的字段进行范围查询和数值过滤。
  3. 自动补全和搜索建议:为用户提供实时搜索建议。
  4. 地理位置查询:支持基于地理位置的查询。
  5. 高性能和可扩展性:依托 Redis 的内存存取特性,提供极高的查询效率。

与 ElasticSearch 对比

性能对比

为了提供一个清晰的性能对比,下面是一个RedisSearch与Elasticsearch在几个关键性能指标上的比较表格。请注意,这些数据基于特定测试条件下的结果,实际应用中的表现可能会根据具体配置和使用场景有所不同。

指标RedisearchElasticsearch备注
索引速度221秒(5.6百万文档)349秒(5.6百万文档)Redisearch快58%
查询速度12.5K ops/sec3.1K ops/secRedisearch快4倍
查询延迟8毫秒10毫秒Redisearch表现更佳
内存使用通常更高,因为数据存储在内存中主要存储在磁盘,内存用于缓存和索引
写入性能高效,适用于实时写入和更新适合高并发写入场景
查询性能单机环境下查询速度快通过分片分布查询负载,支持近实时搜索
扩展性受限于内存大小水平可扩展,轻松增加节点处理更多数据
易用性简单,与Redis一致的API功能强大但学习曲线陡峭

产品对比

特性/工具RedisSearchElasticsearch
数据存储内存中,支持持久化到磁盘磁盘上,基于Lucene索引技术
索引类型全文搜索,数值、地理空间等全文搜索,结构化、非结构化数据
性能极低延迟,适用于实时查询优秀的分布式搜索性能,适合大规模数据集
扩展性支持通过Redis Cluster进行水平扩展强大的集群管理功能,易于水平扩展至PB级数据
易用性配置简单,对于熟悉Redis的用户友好功能丰富但设置较为复杂,学习曲线较陡
API与语言支持REST API, 提供多种客户端库RESTful API, 多种编程语言的官方及第三方客户端库
查询能力基本的全文检索和过滤复杂的聚合、脚本、过滤器等高级查询
社区支持开源社区活跃,作为Redis的一部分得到维护非常活跃的开源社区,有商业版本提供企业级支持
典型应用场景实时应用、缓存层、小到中等规模的数据集日志分析、大数据处理、电子商务搜索引擎
成本考虑主要是硬件成本(内存),因为它是内存数据库包括硬件(主要是存储)、软件许可费(如果使用X-Pack)
运维复杂度相对较低,依赖于Redis本身的稳定性和监控工具较高,需要专门的运维团队来管理和优化集群

注意

  • 数据存储一栏中,RedisSearch主要依赖于Redis的内存存储机制,虽然它也提供了持久化选项,但是默认情况下数据是保存在内存中的。而Elasticsearch则是基于磁盘存储,并利用了Lucene来创建高效的索引。
  • 性能方面,RedisSearch由于其内存操作的特点,在响应时间上有优势;Elasticsearch则是在大规模分布式环境下表现出色。
  • 易用性方面,RedisSearch对于已经熟悉Redis的人来说更加直观容易上手;而Elasticsearch虽然强大,但是它的配置和使用相对更复杂一些。
  • 社区支持反映了两种工具背后的开发者社区活动程度以及是否有商业支持可供选择。
  • 成本考虑不仅包含了软件本身的成本,还包括了运行这些系统所需的硬件资源的成本。
  • 运维复杂度则指出了日常维护和管理这两种系统的难易程度。

如何使用 Docker 安装 RedisSearch

使用 Docker 安装 RedisSearch 非常简单。以下是步骤:

1. 获取 RedisSearch Docker 镜像

首先,确保系统已安装 Docker,然后运行以下命令来拉取 RedisSearch 镜像:

docker pull redislabs/redisearch

2. 启动 RedisSearch 容器

使用以下命令运行 RedisSearch 容器,并将 Redis 服务映射到本地的 6379 端口:

docker run -it -d -p 6379:6379 --name redis-search redislabs/redisearch:latest 

3. 验证安装

通过以下命令检查 Redis 模块是否安装成功。出现 search 模块表示成功:

127.0.0.1:6379> MODULE LIST
1) 1) "name"2) "ReJSON"3) "ver"4) (integer) 999999
2) 1) "name"2) "search"3) "ver"4) (integer) 20613

RedisSearch 使用示例

成功启动 RedisSearch 后,你可以通过 Redis 客户端进行连接并执行操作。以下是一些常见的使用示例:

1. 连接到 RedisSearch

使用 redis-cli 工具连接到 Redis 容器:

docker exec -it redis-search redis-cli

2. 创建索引

在 RedisSearch 中,创建索引是第一步。你需要定义文档结构及其字段类型:

FT.CREATE myIndex ON HASH PREFIX 1 doc: SCHEMA title TEXT WEIGHT 5.0 body TEXT url TEXT

解释:

  • myIndex:索引的名称。
  • ON HASH:表示文档使用 Redis 哈希存储。
  • PREFIX 1 doc::表示文档的前缀是 doc:,即所有以 doc: 开头的键都是索引的一部分。
  • SCHEMA:定义索引的字段和类型。
    • title TEXT WEIGHT 5.0title 是一个文本字段,权重为 5.0。
    • body TEXTbody 是一个文本字段,使用默认权重。
    • url TEXTurl 是一个文本字段。

3. 添加文档

使用 Redis 哈希结构向 RedisSearch 添加文档:

HSET doc:1 title "Redisearch Introduction" body "Redisearch is a search engine addon for Redis" url "http://example.com/doc1"
HSET doc:2 title "Docker Guide" body "A complete guide to using Docker containers" url "http://example.com/doc2"
HSET doc:3 title "Advanced Redis" body "Learn advanced Redis usage and patterns" url "http://example.com/doc3"

4. 执行搜索

搜索所有包含 “Redisearch” 的文档:

通过 FT.SEARCH 命令进行全文搜索。以下是一些示例:

127.0.0.1:6379> FT.SEARCH myIndex "Redisearch"1) (integer) 1
2) "doc:1"
3) 1) "title"2) "Redisearch Introduction"3) "body"4) "Redisearch is a search engine addon for Redis"5) "url"6) "http://example.com/doc1"7) "HSET"8) "doc:3"
搜索标题包含 “Docker” 的文档
127.0.0.1:6379> FT.SEARCH myIndex "@title:Docker"1) (integer) 1
2) "doc:2"
3) 1) "title"2) "Docker Guide"3) "body"4) "A complete guide to using Docker containers"5) "url"6) "http://example.com/doc2"
搜索包含 “Docker” 的文档,只返回 titleurl 字段
127.0.0.1:6379> FT.SEARCH myIndex "Docker" RETURN 2 title url1) (integer) 1
2) "doc:2"
3) 1) "title"2) "Docker Guide"3) "url"4) "http://example.com/doc2"

使用排序

可以对搜索结果进行排序。例如,按标题进行升序排列:

127.0.0.1:6379> FT.SEARCH myIndex "guide" SORTBY title ASC1) (integer) 1
2) "doc:2"
3) 1) "title"2) "Docker Guide"3) "body"4) "A complete guide to using Docker containers"5) "url"6) "http://example.com/doc2"

删除文档和索引

删除文档

可以使用 Redis 的 DEL 命令删除文档:

DEL doc:1
删除索引

可以使用 FT.DROPINDEX 命令删除索引:

FT.DROPINDEX myIndex

默认情况下,这不会删除相关的文档。如果你想同时删除文档,需要加上 DD 参数:

FT.DROPINDEX myIndex DD

聚合查询

RedisSearch 支持聚合查询,用于数据分析。这个查询会对所有文档按 title 分组,并计算每组的文档数量。

127.0.0.1:6379> FT.AGGREGATE myIndex "*" GROUPBY 1 @title REDUCE COUNT 0 AS count1) (integer) 3
2) 1) "title"2) "Redisearch Introduction"3) "count"4) "1"
3) 1) "title"2) "Docker Guide"3) "count"4) "1"
4) 1) "title"2) "Advanced Redis"3) "count"4) "1"

同义词设置

# 创建索引
FT.CREATE myIndex2 ON HASH PREFIX 1 doc: SCHEMA title TEXT WEIGHT 5.0 body TEXT url TEXT# 添加文档
HSET doc:1 title "Quick brown fox" body "The quick brown fox jumps over the lazy dog." url "http://example.com/doc1"
HSET doc:2 title "Fast car" body "A fast car can reach high speeds quickly." url "http://example.com/doc2"
HSET doc:3 title "Speedy delivery" body "Speedy delivery is our promise." url "http://example.com/doc3"# 添加同义词组
FT.SYNUPDATE myIndex2 synonym_group_1 "quick" "fast" "speedy"# 查询同义词组
FT.SYNDUMP myIndex2# 搜索
FT.SEARCH myIndex2 "quick"
FT.SEARCH myIndex2 "fast"
FT.SEARCH myIndex2 "speedy"

总结

RedisSearch 为 Redis 提供了强大的搜索功能,从简单的全文搜索到复杂的聚合查询和同义词扩展,都能轻松实现。通过 Docker 快速安装和使用 RedisSearch,可以极大简化开发过程,适用于各种需要实时搜索的应用场景。

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

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

相关文章

C++ | Leetcode C++题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; class Solution { public:int getSteps(int curr, long n) {int steps 0;long first curr;long last curr;while (first < n) {steps min(last, n) - first 1;first first * 10;last last * 10 9;}return steps;}int findKthNum…

Ubuntu20.04 安装汉语拼音后重启登入黑屏

在虚拟机上装了一个Ubuntu用来学C&#xff0c;默认没有安装中文输入。于是按照网上教程装了几个汉语包。切换输入法的时候突然死机&#xff0c;重启登入直接黑屏。百度后发现有不少老哥和我这个问题一模一样&#xff0c;按照他们的方法也终于整好了&#xff0c;虚惊一场。 解决…

Windows 10 系统安装 FFmpeg 查看、转换、编辑音频文件

1、FFmpeg官网&#xff1a;FFmpeg 点击下载 可以选择下载full版本 下载之后解压到指定目录&#xff0c;在系统环境变量 Path 里面新增环境变量 打开CMD终端运行 ffmpeg -version 查看是否安装成功。 2、基本命令 查看音频基本信息 ffprobe 1.mp3 ##输出 [mp3 000002ab334405…

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr

DataLight&#xff08;V1.4.5&#xff09; 版本更新&#xff0c;新增 Ranger、Solr DataLight 迎来了重大的版本更新&#xff0c;现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化&#xff0c;新增了对 Ranger 和 Solr 服务组件的支持&#xff0c;同时对多项已…

傅里叶级数在机器人中的应用(动力学参数辨识)

B站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清华大学李永乐老师教你如何理解傅里叶变换&#xff0c;辨清美颜和变声原理&#xff0c;&#xff01;&#xff01;_哔哩哔哩_bilibiliB站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清…

macOS安装MySQL以后如何配置环境变量

当安装了MySQL,解决了远程链接的问题以后, 还没有完事大捷, 还需要配置环境变量. 因为我需要使用mysql命令, 以及备份相关的命令. 下面是mysql的默认配置截图: 接着我查看了/usr/local/mysql/bin这个目录. 果然很多命令都在这个里面. 所以我将这个目录加载到了path中. e…

XSS | 反射型 XSS 攻击

关注这个漏洞的其他相关笔记&#xff1a;XSS 漏洞 - 学习手册-CSDN博客 0x01&#xff1a;反射型 XSS — 理论篇 反射型 XSS 又称非持久型 XSS&#xff0c;这种攻击方式往往具有一次性。 常见的攻击方式&#xff1a; 攻击者通过电子邮件等方式将包含 XSS 代码的恶意链接发送给…

Linux标准IO(五)-I/O缓冲详解

1.简介 出于速度和效率的考虑&#xff0c;系统 I/O 调用&#xff08;即文件 I/O&#xff0c;open、read、write 等&#xff09;和标准 C 语言库 I/O 函数&#xff08;即标准 I/O 函数&#xff09;在操作磁盘文件时会对数据进行缓冲&#xff0c;本小节将讨论文件 I/O 和标准 I/…

蓝桥杯--STM32G431RBT6(TIM定时器的输出频率和占空比,含详细原理介绍和使用方法)

目录 一、前言 二、代码 实现功能&#xff1a;​编辑 按如图配置 定义变量 编写执行代码 显示在LCD上 加入按键效果 三、效果展示 四、代码开源 一、前言 ARR 即自动重装载值&#xff08;Auto Reload Register&#xff09;。相当于一个水杯&#xff0c;水杯容量&am…

【EXCEL数据处理】000002 案列 条件格式之重复值。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。

【EXCEL数据处理】000002 案列 条件格式之重复值。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来&#xff0c;方便查看。 在日常的数据处理和分析工作中&#xff0c;Excel 是一款强大而广泛使用的工具。其中&#xff0c;条件格式中的重复值功能对于快…

Golang | Leetcode Golang题解之第438题找到字符串中所有字母异位词

题目&#xff1a; 题解&#xff1a; func findAnagrams(s, p string) (ans []int) {sLen, pLen : len(s), len(p)if sLen < pLen {return}count : [26]int{}for i, ch : range p {count[s[i]-a]count[ch-a]--}differ : 0for _, c : range count {if c ! 0 {differ}}if diff…

Java | Leetcode Java题解之第438题找到字符串中所有字母异位词

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> findAnagrams(String s, String p) {int sLen s.length(), pLen p.length();if (sLen < pLen) {return new ArrayList<Integer>();}List<Integer> ans new ArrayList<Int…

滚珠丝杠在人形机器人及线控制动和转向中大放异彩

直线驱动器用于对旋转角度不大、高负载的场景,在人形机器人中多用于四肢。直线驱动器多采取“电机+丝杠”,将旋转运动转为关节末端的直线运动,能够起到较好的支撑和承重效果,能够较好的适配应用场景的负载需求。 特斯拉人形机器人Optimus 双足、双臂采用连杆结构,连杆末端…

25:stm32的低功耗模式

低功耗模式 1、PWR电源控制2、低功耗模式 1、PWR电源控制 PWR&#xff08;Power Control&#xff09;电源控制。PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能&#xff0c;这里我们只学习低功耗模式的功能&#xff0c;低功耗模式…

MySQL --用户管理

文章目录 1.用户1.1用户信息1.2创建用户1.3删除用户1.4修改用户密码 2.数据库的权限2.1给用户授权2.2回收权限 如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理。 1.用户 1.1用户信息 MySQL中的用户&#xff0c;都存储在系…

性能调优知识点(mysql)一

Mysql 索引 索引介绍 1.索引是排好序的数据结构。他的目的是为了提升查询效率。 2.mysql存储引擎分为innodb和myisam。它是用来形容表的。 innodb支持事务、外键、行锁 myisam不支持事务、外键 3.myisam使用3个文件来存储每张表数据&#xff0c;每个文件名以表名开头&#x…

Python | Leetcode Python题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; class Solution:def getSteps(self, cur: int, n: int) -> int:steps, first, last 0, cur, curwhile first < n:steps min(last, n) - first 1first * 10last last * 10 9return stepsdef findKthNumber(self, n: int, k: int)…

GS-SLAM论文阅读笔记--MM3DGS SLAM

前言 多传感器融合GS-SLAM的另一个IROS2024,不过这篇没有用到激光雷达&#xff0c;而是相机和IMU结合而实现的。今天看一下这篇。 文章目录 前言1.背景介绍2.关键内容2.1 跟踪2.2 深度监督2.3 惯性融合2.4建图2.5 总体流程 3.文章贡献4.个人思考 1.背景介绍 虽然SLAM方法使用…

class 023 随机快速排序

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. https://space.bilibili.com/8888480?spm_id_f…

MySql简介及发展

MySql简介及发展 1、MySql起源和分支 MySQL 是最流行的关系型数据库软件之一&#xff0c;由于其体积小、速度快、开源免费、简单易用、维护成本 低等&#xff0c;在集群架构中易于扩展、高可用&#xff0c;因此深受开发者和企业的欢迎。 Oracle和MySQL是世界市场占比最高的两…