https://github.com/RediSearch/RediSearch

安装RediSearch通常非常直接。确保你的Redis版本至少为6.0,并且支持加载Forking预览版模块。
1. 前提条件
确保你的系统已安装以下软件:
Git、Make、GCC (或其他C编译器)
Redis 6.0 或更高版本
操作系统:支持 Linux、macOS 和 Windows(通过 WSL)。
内存:至少 512 MB RAM(推荐 1 GB 以上,以支持更大数据集)。
2. 安装方式选择
源码安装
(1) 获取Redis源码
首先从GitHub上克隆Redis的官方仓库:
git clone https://github.com/redis/redis.git或sudo apt updatesudo apt install redis-server
你需要获取Redisearch模块的源代码。有两种方法:
从Redis官方仓库中直接获取。
从Redis Modules页面获取独立的Redisearch仓库。
这里假设你从Redis Modules页面获取Redisearch:
git clone https://github.com/RediSearch/RediSearch.git
cd redismake
进入Redisearch目录,同样需要编译模块:
cd RediSearchmake# 生成模块路径ls bin/linux-x64-release/redisearch.so
一旦编译完成,你可以使用以下命令启动带有Redisearch模块的Redis服务器:
../redis/src/redis-server --loadmodule ./redisearch.so# 这里的redisearch.so是Redisearch模块的动态链接库文件# 它应该位于Redisearch的根目录下。
为了验证安装是否成功,你可以尝试在Redis客户端执行一些Redisearch命令。
打开另一个终端窗口,运行Redis客户端:
../redis/src/redis-cli
然后尝试创建一个索引:
ft.create myIndex SCHEMA title TEXT WEIGHT 1.0 body TEXT WEIGHT 0.5
如果命令执行成功并且没有错误消息,那么说明Redisearch已正确安装。
Docker 安装
docker pull redislabs/redisearch
# 使用官方镜像docker run -p 6379:6379 redislabs/redisearch:latest# 自定义配置docker run -d \-v my/redis.conf:/usr/local/etc/redis/redis.conf \-v my/modules:/usr/lib/redis/modules \redislabs/redisearch:latest \redis-server usr/local/etc/redis/redis.conf \--loadmodule usr/lib/redis/modules/redisearch.so
MODULE LIST
3. 注意事项
确保你在执行上述步骤时具有足够的权限。
如果你是在生产环境中部署Redisearch,请遵循最佳实践,如使用适当的防火墙规则、限制访问等。
对于不同的操作系统,编译和安装过程可能会有所不同,请参考官方文档获取适用于特定平台的指导。

二、核心配置参数
Redisearch 的配置文件是一个 JSON 格式的文件,可以放置在 Redis 的配置目录中。以下是一个简单的配置示例:
{"redis-search": {"module-path": "redis-search.so","index-pattern": "index*","index-num-shards": "3","index-num-replicas": "2","search-query-template": "{text_field}:{text_field}*{score_field}","search-query-boost-fields": {"score_field": 2.0,"title_field": 1.5,"description_field": 1.0},"index-client-timeout": "5000","index-client-max-retries": "3","index-client-idle-timeout": "30000","index-client-channel-timeout": "1000","index-on-demand": false,"index-concurrent-create": false,"datastore": {"module-path": "redis-datastore.so","nodes": [{"host": "127.0.0.1", "port": "6379"}]}}}
1. 内存管理
# 设置最大内存限制(防止OOM)FT.CONFIG SET MAXMEMORY 4GB# 索引内存分配策略FT.CONFIG SET ALLOCATOR_POLICY native # 可选 jemalloc
2. 索引行为控制
# 自动索引过期时间(秒)FT.CONFIG SET GC_POLICY FORKFT.CONFIG SET GC_SCAN_INTERVAL 300# 停用词配置FT.CONFIG SET STOPWORDS 0 # 禁用默认停用词FT.CONFIG ADDSTOPWORDS the and a # 自定义停用词
3. 查询优化
# 查询超时控制(毫秒)FT.CONFIG SET TIMEOUT 5000# 结果集最大条数FT.CONFIG SET MAXSEARCHRESULTS 100000# 模糊搜索灵敏度FT.CONFIG SET FUZZY_MAX_EXPANSIONS 200

三、博客系统实战
下面通过一个博客系统,展示如何使用RediSearch创建索引、添加文档以及执行搜索操作。
1. 创建索引
我们需要创建一个索引来存储文档。每篇文章都有标题、作者以及正文内容。
FT.CREATE articles SCHEMAtitle TEXT WEIGHT 5.0author TEXTcontent TEXT WEIGHT 1.0
这里我们创建了一个名为articles的索引,其中包含三个字段:title、author 和 content。title 字段的权重设置为5.0,这意味着在搜索结果排序中标题的重要性高于正文内容。
2. 添加文档
我们可以向索引中添加一些文档。我们要添加一篇新的博客文章:
FT.ADD articles doc1 1.0 FIELDStitle "Understanding Redisearch"author "John Doe"content "This article explains the basics of Redisearch and how to use it effectively."
这里我们使用FT.ADD命令向articles索引中添加了一篇文档,文档ID为doc1,相关性得分为1.0(这是文档的相关性得分,默认为1.0),并且定义了该文档的具体字段和内容。
3. 搜索文档
让我们尝试搜索这些文档。如果我们想要找到包含“Redisearch”这个词的文章:
FT.SEARCH articles "@content('Redisearch')"
这将返回包含关键词“Redisearch”在content字段中的所有文档。
如果我们要同时根据标题和内容进行搜索:
FT.SEARCH articles "@title('Understanding') @content('basics')"
此命令会查找标题中包含“Understanding”并且内容中包含“basics”的文档。
4. 更多高级查询
Redisearch还支持更复杂的查询语法,例如使用布尔逻辑和地理位置查询。
下面是一个示例,假设我们有一个包含地理位置信息的索引:
FT.CREATE places SCHEMAname TEXTlocation GEOFT.ADD places place1 1.0 FIELDSname "Central Park"location "-73.969745,40.782915"FT.SEARCH places "@location(40.782915 -73.969745 1000 km)"
在这个例子中,我们创建了一个名为places的索引,包含了地点的名字和位置坐标。然后我们添加了一个地方place1,最后我们搜索距离坐标(40.782915, -73.969745)1000公里范围内的地点。
5. 案例总结
部署架构:Redis Cluster + RediSearch分片 持久化策略:AOF everysec + RDB每日备份 监控体系:Prometheus + Grafana + Redis Exporter

四、典型应用场景剖析
Redis :Streams(数据源)→ RediSearch(索引)→ 客户端 ← 结果缓存(RedisJSON)
使用Pub/Sub实现准实时索引更新(<100ms延迟)。 结合RedisJSON存储原始文档。 分面搜索(Faceting)实现动态聚合统计。
FT.SEARCH metrics"@timestamp:[1625097600000 1625184000000]@value:[100 +inf]@tag:{servers|network}"
时间分片索引策略(按小时/天建立索引)。 结合RedisTimeSeries模块进行降采样。 使用FT.AGGREGATE进行滑动窗口统计。

# 限制RediSearch内存使用redis-cli FT.CONFIG SET MEMORY_LIMIT 4GB# 设置查询最大执行时间redis-cli FT.CONFIG SET TIMEOUT 500ms
2. 索引优化参数
# 创建索引时的优化参数示例FT.CREATE idxON HASHPREFIX 1 "product:"SCHEMAtitle TEXT WEIGHT 2.0description TEXTprice NUMERIC SORTABLElocation GEOMAXTEXTFIELDSSTOPWORDS 10TEMPORARY 86400;
SORTABLE:创建额外排序索引。 NOOFFSETS:节省30%内存但失去高亮功能。 STOPWORDS:自定义停用词提升效率。
# 索引碎片整理FT.OPTIMIZE idx# 热更新schemaFT.ALTER idx SCHEMA ADD description TEXT# 安全删除索引FT.DROPINDEX idx DD

检查Redis版本 ≥6.0。 确认模块路径权限。 验证模块兼容性:redis-cli MODULE LIST。
检查索引设计是否合理。 增加TIMEOUT值:FT.CONFIG SET TIMEOUT 10000。
使用EXPLAINCLI分析查询计划。





