mongodb - 构建文本搜索引擎的最佳方法是什么?将需要搜索的所有内容存储在 redis 中,还是直接调用 db?
问题描述
我希望将搜索引擎添加到响应速度尽可能快的应用程序中。用户正在搜索代码或公司名称,因此它是一个相对紧凑的数据集,所以我想知道将所有名称和代码存储在 redis 中是否可行,而不是直接查询数据库。
如果有任何改变,我们会使用 MongoDB。
解决方案
Redis 可以通过安装模块来扩展。
RediSearch提供对哈希和 JSON 文档(使用RedisJSON时)的索引、查询和全文搜索。
您可以在散列中插入代码或公司名称。由于 Redis 将所有内容都存储在内存中(以及索引),因此搜索请求会很快。
这是一个例子:
创建一个包含两个字段的索引。name
并ticker
使用 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"
推荐阅读
- javascript - 表单验证停止后javascript函数不起作用
- c# - 如何在 c# 中使用 EF 来使用 localDb 而不会丢失数据
- android - 图像和视频的后端设置以在 android 应用程序中下载和使用
- r - 我在 R 中安装 BiocManager 并且需要很长时间?这是为什么?
- javascript - 为什么 document.getElementById('output').innerHTML.value 返回“未定义”?
- python - PyCharm not seeing PyYAML with Pipenv
- javascript - 无法从不同组件的函数体内更新组件 - React Native?
- python - 如何计算字符串的唯一字符集?
- c# - Handle all errors from global handling exception in Web API Core 3.1
- swift - 在swift 5中将UITextView标签作为参数传递给UITapGestureRecognizer