构建文本搜索引擎的最佳方式是什么?将需要搜索的所有内容存储在 redis 中,还是直接调用数据库?
What’s the best way to build a text search engine? Store everything that needs to be searched over in redis, or do you make direct calls to the db?
我希望将搜索引擎添加到响应速度尽可能快的应用程序中。用户正在搜索代码或公司名称,因此它是一个相对紧凑的数据集,所以我想知道是否可以将所有名称和代码存储在 redis 中而不是直接查询数据库。
如果有任何变化,我们使用 MongoDB。
如果您将数据存储为单独的列表或哈希,则可以使用 redis 进行搜索。
https://redis.io/topics/data-types
如果您需要执行自由文本搜索等操作,redis 无法执行此操作,您需要继续使用 MongoDB
安装modules即可扩展Redis。
RediSearch provides indexing, querying and full-text search on hashes and on JSON documents (when using RedisJSON).
您可以在散列中插入代码或公司名称。由于 Redis 将所有内容都存储在内存中(索引也是如此),因此搜索请求会很快。
这是一个例子:
创建一个包含两个字段的索引。 name
和 ticker
使用 TEXT 类型。
(请注意,对于自动收报机,我们禁用了 stemming。)
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"
我希望将搜索引擎添加到响应速度尽可能快的应用程序中。用户正在搜索代码或公司名称,因此它是一个相对紧凑的数据集,所以我想知道是否可以将所有名称和代码存储在 redis 中而不是直接查询数据库。
如果有任何变化,我们使用 MongoDB。
如果您将数据存储为单独的列表或哈希,则可以使用 redis 进行搜索。
https://redis.io/topics/data-types
如果您需要执行自由文本搜索等操作,redis 无法执行此操作,您需要继续使用 MongoDB
安装modules即可扩展Redis。
RediSearch provides indexing, querying and full-text search on hashes and on JSON documents (when using RedisJSON).
您可以在散列中插入代码或公司名称。由于 Redis 将所有内容都存储在内存中(索引也是如此),因此搜索请求会很快。
这是一个例子:
创建一个包含两个字段的索引。 name
和 ticker
使用 TEXT 类型。
(请注意,对于自动收报机,我们禁用了 stemming。)
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"