这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
RediSearch 是一个高性能的全文搜索引擎,它可以作为一个 Redis Module(扩展模块)运行在 Redis 服务器上。
特性
RediSearch 主要特性如下:
- 基于文档的多个字段全文索引
- 高性能增量索引
- 文档排序(由用户在索引时手动提供)
- 自动完成建议(带有模糊前缀建议)
- 精确的短语搜索
- 在许多语言中基于词干分析的查询扩展
- 支持用于查询扩展和评分的自定义函数
- 将搜索限制到特定的文档字段
- 数字过滤器和范围
- 在子查询之间使用 AND 或 NOT 操作符的复杂布尔查询
- 可选的查询子句
- 基于前缀的搜索
- 支持字段权重设置
- 使用 Redis 自己的地理命令进行地理过滤
- Unicode 支持(需要 UTF-8 字符集)
- 检索完整的文档内容或只是 ID 的检索
- 支持部分更新和条件文档更新
- 支持文档删除和更新与索引垃圾收集
性能
与ElasticSearch
在同等硬件环境下进行性能评测对比,对维基百科560万个文档(约 5.3GB)进行索引,并对索引的数据集做双单词搜索。对比图如下:
生成索引耗时:
搜索性能对比:
安装
通过docker快速部署
1 | bash复制代码 docker run -p 6379:6379 redislabs/redisearch:latest |
使用
使用 redis-cli 来对 RediSearch 进行相关的操作。
创建索引和字段
1 | arduino复制代码127.0.0.1:6379> ft.create myidx schema title text weight 5.0 desc text |
其中“myidx”为索引的名称,此索引包含了两个字段“title”和“desc”,“weight”为权重,默认值为 1.0。
将内容添加到索引
1 | ruby复制代码127.0.0.1:6379> ft.add myidx doc1 1.0 fields title "He urged her to study English" desc "good idea" |
其中“doc1”为文档 ID(docid),“1.0”为评分(score)。
根据关键查询
1 | bash复制代码127.0.0.1:6379> ft.search myidx "english" limit 0 10 |
可以看出我们使用 title 字段中的关键字“english”查询出了一条满足查询条件的数据。
中文搜索
首先我们需要先给索引中,添加一条中文数据,执行命令如下:
1 | ruby复制代码127.0.0.1:6379> ft.add myidx doc2 1.0 language "chinese" fields title "Java 14 发布了!新功能速览" desc "Java 14 在 2020.3.17 日发布正式版了,但现在很多公司还在使用 Java 7 或 Java 8" |
注意:这里必须要设置语言编码为中文,也就是“language “chinese”” ,默认是英文编码,如果不设置则无法支持中文查询(无法查出结果)。
删除索引的数据
1 | ruby复制代码127.0.0.1:6379> ft.del myidx doc1 |
我们使用索引加文档 ID 就可以实现删除数据的功能。
删除索引
我们可以使用“ft.drop”关键字删除整个索引,执行命令如下:
1 | ruby复制代码127.0.0.1:6379> ft.drop myidx |
客户端库支持
支持大部分语言,详见clients library
本文转载自: 掘金