Redisearch实现的全文检索功能服务
“检索”是很多产品中无法绕开的一个功能模块,当数据量小的时候可以使用模糊查询等操作凑合一下,但是当面临海量数据和高并发的时候,业界常用 elasticsearch 和 lucene 等方案,但是elasticsearch对运行时内存有着最低限额,其运行时大小推荐 2G 以上的内存空间,并且需要额外的磁盘空间做持久化存储。
其实mongoDB 内置的正则匹配搜索文本以及自带的 text 索引和 search 关键字也是一套靠谱的解决方案,但是这一次我们带来一种更加高效经济的文本检索方案:Redisearch
Redis Modules 是 redis 4.0 引入的一种扩展机制,用户可以通过实现 redis module 提供的 C api 接口为 redis 服务添加定制化功能。 redisLab 也希望籍此来规范 redis 社区的 ecosystem 实现。
redis module 本身的版本独立于redis,并且以编译成动态加载库 .so 文件的方式 release, 不同版本的 redis 可以 load 同一版本 module.so 文件。
redis 提供了两种加载方式。可以通过 在 conf 文件中 加入 loadmodule /path/to/mymodule.so ,也可以在 redis-cli中使用命令 MODULE LOAD /path/to/panda.so 动态加载,MODULE UNLOAD 卸载。
特性
基于文档的全文索引。
高性能增量索引。
支持文档评分,文档字段(field) 权重机制。
支持布尔复杂查询。
支持自动补全。
基于 snowball 的词干分析,多语言支持。使用 friso 支持中文分词。
utf-8 字符集支持。
redis 数据持久化支持。
自定义评分机制。
其原理是在 redis 的 hashmap 基础上就可以很容易实现倒排索引的结构。redisearch 倒排索引除了实现了基础功能外,还引入了内存管理等优化功能。如果有兴趣可以阅读源码中的 src/inverted_index.c 部分
首先,安装Rediseach,记住一点你本地的redis服务版本必须在4.0以上,网上一大堆编译安装的攻略,繁琐又浪费时间,所以又到了Docker登场时间了,hub上有编译好的免费镜像供我们下载
1,安装redis
#下载rpm源并安装
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
#安装redis
yum --enablerepo=remi install -y redis
#启动redis服务
service redis start
2,安装Rediseach
docker pull redislabs/redisearch
下载后,直接在后台启动服务
docker run -d -p 6666:6379 redislabs/redisearch:latest

此时已经有一个docker容器在后台启动了,redis服务映射到了宿主的6666端口,我们来连接一下
redis-cli -h localhost -p 6666

检查 modules 是否成功加载

如果返回数组中存在 "ft" , 则表明 redisearch 已经成功加载。
Redisearch 的索引概念 与elasticsearch 的 index 类似,表示某一类文档资源单元。
这里我们定义了一个 SMARTX_VM 索引,其中存储的文档 包含 了 title 和 desc 两个 类型为 TEXT 的field。
FT.CREATE SMARTX_VM SCHEMA title TEXT WEIGHT 5.0 desc TEXT
然后向刚刚创建的这条索引加一个文档
FT.ADD SMARTX_VM vm-20190901 1.0 LANGUAGE "chinese" FIELDS title "中国" desc "我是中国人"
LANGUAGE "chinese" 参数 表示 使用 中文分词器 处理文本。默认为英文
此时我们进行文档检索
FT.SEARCH SMARTX_VM "中国" LANGUAGE "chinese"
注意检索的时候也要指定语言,这里我们用中文分词,默认的英文分词是无法检索中文的

可以看到已经返回了我们想要的结果。
Redisearch 是一个高效,功能完备的内存存储的高性能全文检索组件, 十分适合应用在数据量适中, 内存和存储空间有限的环境。借助数据同步手段,我们可以很方便的将redisearch 结合到现有的数据存储中, 进而向产品提供 全文检索, 自动补全等服务优化功能。
Redisearch实现的全文检索功能服务的更多相关文章
- 使用Python3.7结合Redisearch代替ElasticSearch实现的全文检索功能服务
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_105 "检索"是很多产品中无法绕开的一个功能模块,当数据量小的时候可以使用模糊查询等操作凑合一下,但是当面临海 ...
- 使用Lucene对doc、docx、pdf、txt文档进行全文检索功能的实现
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76273859 本文出自[我是干勾鱼的博客] 这里讲一下使用Lucene对doc. ...
- Bing Maps进阶系列四:路由功能服务(RouteService)
Bing Maps进阶系列四:路由功能服务(RouteService) Bing Maps提供的路由功能服务(RouteService)可以实现多方位的计算地图上的路线指示,路径行程等功能,比如说实现 ...
- 在ef core中使用postgres数据库的全文检索功能实战
起源 之前做的很多项目都使用solr/elasticsearch作为全文检索引擎,它们功能全面而强大,但是对于较小的项目而言,构建和维护成本显然过高,尤其是从关系数据库/文档数据库到全文检索引擎的数据 ...
- sphinx全文检索功能 | windows下测试 (一)
前一阵子尝试使用了一下Sphinx,一个能够被各种语言(PHP/Python/Ruby/etc)方便调用的全文检索系统.网上的资料大多是在linux环境下的安装使用,当然,作为生产环境很有必要部署在* ...
- 服务链(Service Chaining,or Service Function Chaining,SFC,功能服务链)
Software-configured service chaining provides the capability to dynamically include best-of-b ...
- 对本地Solr服务器添加IK中文分词器实现全文检索功能
在上一篇随笔中我们提到schema.xml中<field/>元素标签的配置,该标签中有四个属性,分别是name.type.indexed与stored,这篇随笔将讲述通过设置type属性的 ...
- 【搜索引擎】Solr Suggester 实现全文检索功能-分词和和自动提示
功能需求 全文检索搜索引擎都会有这样一个功能:输入一个字符便自动提示出可选的短语: 要实现这种功能,可以利用solr的SuggestComponent,SuggestComponent这种方法利用Lu ...
- 全文检索ES 服务启动和关闭
nohup ./elasticsearch & 可以后台开启elasticsearch服务 ps-ef列出所有进程 ps-ef | grep elastic...查找elastic..的进程 ...
随机推荐
- 实时检测微信域名防红拦截检测API系统,最新腾讯域名屏蔽检测官方接口
最近手里有个项目需要检测域名在微信里是否可以打开,如果被微信拦截,则需要进行下一步操作,所以需要判断域名的状态,但是微信官方并没有提供相关查询的方法,最后在网上找到了这个接口地址,分享给有需要的朋友. ...
- leetcode117. 填充每个节点的下一个右侧节点指针 II
给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节 ...
- Windows下创建指定大小的文件
前言 因为需要测试存储容量,所以需要能生成指定大小的文件. 执行 #语法:fsutil file createnew 路径和文件名 文件大小 fsutil file createnew D:\test ...
- Vue—新版本router-view 与 keep-alive 的互动
1. <keep-alive> 直接嵌套到 <router-view> 上会失效,正确写法: <router-view #="{ Component }&quo ...
- 深度学习论文翻译解析(十五):Densely Connected Convolutional Networks
论文标题:Densely Connected Convolutional Networks 论文作者:Gao Huang Zhuang Liu Laurens van der Maaten Kili ...
- FPGA 流水灯
VerilogHDL那些事儿_建模篇(黑金FPGA开发板配套教程) 作者:akuei2 说明:参照该书将部分程序验证学习一遍 学习时间:2014年5月2号 主要收获: 1. 对FPGA有初步了解: 2 ...
- 排序-InsertionSort 插入排序
插入排序 の implementation 插入排序就像打赌的时候,比如双扣.抽牌的时候,一次拿一张牌,这张牌和之前的牌一张张比较.选择把这张牌插入什么位置,排好顺序的位置后打牌更顺.要不然得一个一个 ...
- 老猿Python博文汇总目录--按标题排序
☞ ░ 前往老猿Python博文目录 ░ 本部分为老猿CSDN全部博文的汇总(含转载部分),所有文章在此未进行归类,仅按文章标题排序,方便关键字查找.本部分内容将至少以周为单位定期更新,可能不包含发布 ...
- 第二十九章、containers容器类部件QFrame框架部件详解
一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有如下: 容器中的Frame为一个矩形的框架对象,对应类QFrame,QFrame类是PyQt中带框架 ...
- 【Docker】 .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 、配置swagger (三)
系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...