🐱 算神的小窝 🤓

ubuntu安装RediSearch.md


CreationTime:7/25/2024 9:14:47 PM LastAccessTime:4/23/2025 6:35:01 AM


ubuntu安装RediSearch

RediSearch 是一个高性能的全文搜索引擎,它可以作为一个 Redis Module(扩展模块)运行在 Redis 服务器上。

RediSearch 主要特性如下:

  • 基于文档的多个字段全文索引
  • 高性能增量索引
  • 文档排序(由用户在索引时手动提供)
  • 在子查询之间使用 AND 或 NOT 操作符的复杂布尔查询
  • 可选的查询子句
  • 基于前缀的搜索
  • 支持字段权重设置
  • 自动完成建议(带有模糊前缀建议)
  • 精确的短语搜索
  • 在许多语言中基于词干分析的查询扩展
  • 支持用于查询扩展和评分的自定义函数
  • 将搜索限制到特定的文档字段
  • 数字过滤器和范围
  • 使用 Redis 自己的地理命令进行地理过滤
  • Unicode 支持(需要 UTF-8 字符集)
  • 检索完整的文档内容或只是 ID 的检索
  • 支持文档删除和更新与索引垃圾收集
  • 支持部分更新和条件文档更新

Ubuntu 安装 RediSearch 的步骤如下:

  1. 更新包缓存和升级系统
sudo apt update && sudo apt full-upgrade
  1. 安装 Redis 和 RedisSearch
sudo apt install redis-server redis-tools redis-redisearch
  1. 配置 RedisSearch
sudo vim /etc/redis/redis.conf

在文件末尾添加以下内容(如果没有,请创建一个新行并添加):

loadmodule /usr/lib/redis/modules/redisearch.so
  1. 重启 Redis 服务
sudo systemctl restart redis-server

验证 RediSearch

启动 redis-cli,命令如下:

127.0.0.1:6379> module list
1) 1) "name"
   2) "ft"
   3) "ver"
   4) (integer) 10610

返回数组存在“ft”,表明 RediSearch 模块已经成功加载。

使用

我们先使用 redis-cli 来对 RediSearch 进行相关的操作。

创建索引和字段

127.0.0.1:6379> ft.create myidx schema title text weight 5.0 desc text
OK

其中“myidx”为索引的ID,此索引包含了两个字段“title”和“desc”,“weight”为权重,默认值为 1.0。

将内容添加到索引

127.0.0.1:6379> ft.add myidx doc1 1.0 fields title "He urged her to study English" desc "good idea"
OK

其中“doc1”为文档 ID(docid),“1.0”为评分(score)。

根据关键查询

127.0.0.1:6379> ft.search myidx "english" limit 0 10
1) (integer) 1
2) "doc1"
3) 1) "title"
   2) "He urged her to study English"
   3) "desc"
   4) "good idea"

可以看出我们使用 title 字段中的关键字“english”查询出了一条满足查询条件的数据。

中文搜索

首先我们需要先给索引中,添加一条中文数据,执行命令如下:

127.0.0.1:6379> ft.add myidx doc2 1.0 language "chinese" fields title ".Net 8 发布了!新功能速览" desc ".Net 8 在 2023 年 11 月 10 日 发布正式版了"
OK

注意:这里必须要设置语言编码为中文,也就是language "chinese",默认是英文编码,如果不设置则无法支持中文查询(无法查出结果)。

我们使用之前的查询方式,命令如下:

127.0.0.1:6379> ft.search myidx "正式版"
1) (integer) 0

我们发现并没有查到任何信息,这是因为我们没有指定搜索的语言,不但保存时候要指定编码,查询时也需要指定,查询命令如下:

127.0.0.1:6379> ft.search myidx "发布了" language "chinese"
1) (integer) 1
2) "doc2"
3) 1) "desc"
   2) ".Net 8 在 2023 年 11 月 10 日 发布正式版了"
   3) "title"
   4) ".Net 8 发布了!新功能速览"

从结果可以看出中文信息已经被顺利的查询出来了。

删除索引的数据

127.0.0.1:6379> ft.del myidx doc1
(integer) 1

我们使用索引加文档 ID 就可以实现删除数据的功能。

删除索引

我们可以使用“ft.drop”关键字删除整个索引,执行命令如下:

127.0.0.1:6379> ft.drop myidx
OK

查询索引详细信息

我们可以使用“ft.info”关键查询索引相关信息,执行命令如下:

127.0.0.1:6379> ft.info myidx
 1) index_name
 2) myidx
 3) index_options
 4) (empty list or set)
 5) fields
 6) 1) 1) title
       2) type
       3) TEXT
       4) WEIGHT
       5) "5"
    2) 1) desc
       2) type
       3) TEXT
       4) WEIGHT
       5) "1"
 7) num_docs
 8) "2"
 9) max_doc_id
10) "2"
11) num_terms
12) "9"
13) num_records
14) "18"
15) inverted_sz_mb
16) "0.000102996826171875"
17) total_inverted_index_blocks
18) "29"
19) offset_vectors_sz_mb
20) "1.71661376953125e-05"
21) doc_table_size_mb
22) "0.000164031982421875"
23) sortable_values_size_mb
24) "0"
25) key_table_size_mb
26) "8.0108642578125e-05"
27) records_per_doc_avg
28) "9"
29) bytes_per_record_avg
30) "6"
31) offsets_per_term_avg
32) "1"
33) offset_bits_per_record_avg
34) "8"
35) gc_stats
36)  1) bytes_collected
     2) "0"
     3) total_ms_run
     4) "16"
     5) total_cycles
     6) "14"
     7) avarage_cycle_time_ms
     8) "1.1428571428571428"
     9) last_run_time_ms
    10) "2"
    11) gc_numeric_trees_missed
    12) "0"
    13) gc_blocks_denied
    14) "0"
37) cursor_stats
38) 1) global_idle
    2) (integer) 0
    3) global_total
    4) (integer) 0
    5) index_capacity
    6) (integer) 128
    7) index_total
    8) (integer) 0

其中“num_docs”表示存储的数据数量。

An unhandled error has occurred. Reload 🗙