首页 > 解决方案 > 构建文本搜索引擎的最佳方法是什么?将需要搜索的所有内容存储在 redis 中,还是直接调用 db?

问题描述

我希望将搜索引擎添加到响应速度尽可能快的应用程序中。用户正在搜索代码或公司名称,因此它是一个相对紧凑的数据集,所以我想知道将所有名称和代码存储在 redis 中是否可行,而不是直接查询数据库。

如果有任何改变,我们会使用 MongoDB。

标签: mongodbredis

解决方案


Redis 可以通过安装模块来扩展。

RediSearch提供对哈希和 JSON 文档(使用RedisJSON时)的索引、查询和全文搜索。

您可以在散列中插入代码或公司名称。由于 Redis 将所有内容都存储在内存中(以及索引),因此搜索请求会很快。

这是一个例子:

创建一个包含两个字段的索引。nameticker使用 TEXT 类型。(请注意,对于代码,我们禁用了词干。)

127.0.0.1:6379> FT.CREATE idx SCHEMA name TEXT ticker TEXT NOSTEM
OK

在 HASH 中插入公司:

127.0.0.1:6379> HSET ticker:ufo ticker UFO name SpaceX
(integer) 2

我可以使用股票代码进行搜索:

127.0.0.1:6379> FT.SEARCH idx ufo
1) (integer) 1
2) "ticker:ufo"
3) 1) "ticker"
   2) "UFO"
   3) "name"
   4) "SpaceX"

或使用公司名称搜索:

127.0.0.1:6379> FT.SEARCH idx spacex
1) (integer) 1
2) "ticker:ufo"
3) 1) "ticker"
   2) "UFO"
   3) "name"
   4) "SpaceX"

推荐阅读