成本更低,速度更快的全文搜索引擎 - RediSearch

原创
2021/03/21 01:31
阅读数 2.6K

前言

先声明一下,题目说的更低成本是指学习成本或者运维成本,我的文章会更适合初创互联网技术看, 主要原因是我的文章都是考虑得更多的是低成本性价比高地达到目的。我是的一个初创互联网公司的技术负责人(这不是说什么牛逼,我觉得自己挺垃圾的,只是带出我为什么会考虑这么多这些东西,而不是走大厂的技术架构)。大家都知道在技术里面没有银弹,只有更合适,所以应该要选用更合适你们公司的技术。

背景

最近公司需要做一套Q&A,需要用到全文搜索. 分析了一下需求, Q&A内容有限,如果用ES来做全文搜索,一方面运维成本比较高,另一方面我对Redis更熟悉,使用更多。所以优先考虑了比较新的RedisSearch. 至于写这篇文章主要是我在搭建和使用过程中确实找不到什么资料。官网算是最全面,所以写这篇文章希望可以帮到有需要的人,顺便说一下本文最大的亮点是针对汉语的处理,其他文章都没有列出来的。

安装

RediSearch是一个Redis插件,官网主要有两个安装方式,而我是两个方式取其精华,下文会讲到并提供插件的so文件。

1.自行编译

下面内容直接摘自官网,因为不是重点,主要我没有clone成功过一次

官网传送门

git clone --recursive https://github.com/RediSearch/RediSearch.git 
cd RediSearch

macOS:

make setup

Linux:

sudo make setup

Next, build:

make build

Finally, run Redis with RediSearch:

make run

运行后会运行一个6379端口的带有RediSearch插件的Redis服务

2.Docker

Docker主要是用于体验功能,所以并不推荐用于生产环境。

docker run -p 6379:6379 redislabs/redisearch:latest

运行Docker镜像后会运行一个6379端口的带有RediSearch插件的Redis服务。

3. 我的操作

由于我已经有可用的Redis实例,对于一个Q&A来说,一个小实例即可。然后github的真clone不下来,在gitee拉了一个镜像,但是编译就是失败,由于时间关系,我也不想折腾了。我直接从RediSearch的Docker镜像中的插件文件拉了下来。在用我现有的Redis实例加载插件。下面列出支持的加载方式。Ps: 由于Redis 4.0以上版本才支持插件,所以Redis版本需要在4.0以上(文本使用Redis 6.0.5)。

1. 修改Redis Config配置文件夹, 重启Redis

vim /path/to/redis.conf
#最后加一句
loadmodule /path/to/module/src/redisearch.so

2. 通过启动参数加入插件来启动Redis Server

# redisearch.so 在最后的Git地址可以找到
 redis-server --loadmodule /path/to/module/src/redisearch.so

3. Redis动态加入插件(不推荐,只作为体验用,重启后会失效且不支持使用其他中文分词器参数,下文会详细讲述)

MODULE LOAD /path/to/module/src/redisearch.so

中文配置

其他博主基本在吐槽针对中文的大搜索不友好,到本文的重点了,吐槽中文搜索的人主要原因有两个。1. 很早很早以前的文章。 2. 并没有了解太多就写文章来迷惑大众。实际上RedisSearch默认加入了一个中文分词器FrisoFriso是一个很优秀的中文分词器,基于C开发,使用mmseg算法实现,既准确又高效。本文不会详细介绍,感兴趣的可以自行到Github了解, 传送门

1.文件准备

关于RediSearch如何使用Friso,非常简单。我会在文中提供好配置文件和词典,便于大家快速搭建好环境。

Friso配置文件

friso.ini

词典文件压缩包

lex.zip

(都在最后的Git地址可以找到)

2.加载Friso配置

只需要在上一章的加入插件操作加上参数 FRISOINI=/parh/to/friso.ini。在friso.ini中,有一行 friso.lex_dir = /usr/local/share/friso/dict/UTF-8/。 只需要将词典解压到对应的位置即可。(也可以将词典放到自己喜爱的位置,将配置里面的词典路径修改到对应的路径即可)。

加入FRISOINI参数后, RedisSearch.so将不支持动态加载,所以如果是通过修改配置文件来加载插件的话,Redis是需要重新启动的。当Redis启动成功后,日志会有xxx。代表RediSearch成功开启Friso作为中文分词器。

基本操作

对于基本操作来说,官网已经描述得比较详细了。基本命令使用文档. 为了帮大伙们节省时间。 我直接抽取一些常用命令来作解析。

客户端

总结

实际上现在全文搜索引擎的选择还是比较多。比如通过sphinx,Lucene来实现,又或者直接作为服务调用的ElasticSearch或者RediSearch。ElasticSearch始终还是成熟和功能强大的主流选择,但是RediSearch也在快速发展。至于什么更适合你们公司的产品还是需要经过多方面的分析来决定。希望RediSearch可以发展得更好。

下面是我一个好朋友的公众号和他建的群。他是一个牛人,写的文章也非常独到。想有更多深入交流的小伙伴可以关注或者加群。

为了不需要大家再折腾了, 这里奉上资源地址 https://gitee.com/msgcode/blog-libs/tree/master/RediSearch

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部