简单地说,我们现在是Redis

了解更多

复述,最佳实践

全文搜索

在模块出现之前,全文搜索是使用本地Redis命令实现的。的RediSearch模块提供了比此模式更高的性能。然而,在某些环境中,reresearch是不可用的。此外,这个模式非常有趣,可以推广到reresearch可能不理想的其他工作负载。

假设你想搜索一些文本文档——这可能不是Redis的一个明显的用例,因为它通过键而不是表访问。但相反,Redis可以用来支撑一个非常新颖的全文搜索引擎。

首先,让我们来看一些例子:

  • “Redis非常快”
  • “猎豹速度”
  • “猎豹点”

为了简单起见,让我们将这些条目分解为几组单词:

>大块漂浮植物Ex1 redis非常快猎豹跑得非常快猎豹有斑点

注意,我们给每一行设置了自己的set (ex1…),然后我们根据每个单词向这个集合添加多个成员(尽管看起来我们只是添加了整行,SADD是可变的,所以接受多个成员。我们还把所有的单词都改成了小写。

接下来,我们需要反转这个索引并显示哪个单词位于哪个文档中。为此,我们将为每个单词创建一个集合,然后将文档集名称作为成员。

> SADD redis ex1> SADD为ex1> SADD非常ex1 ex2> SADD fast ex1 ex2SADD猎豹ex2 ex3> SADD有ex3> SADD点ex3

为了清晰起见,我们将其划分为多个单独的命令,但所有的命令通常都将通过a自动执行多/执行块。

要查询微小的全文搜索索引,我们将使用烧结矿命令(集相交)。查找“非常”和“快速”的文档

>烧结速度非常快1)“ex2”2)“丈夫说”

在没有任何文档匹配查询的情况下,我们将得到一个空的结果:

烤红猎豹(空列表或集)

如果你想要一个逻辑或搜索,你可以替换SUNION(设置union)为SINTER。

太阳猎豹1)“ex2”2)“要是”3)“丈夫说”

从索引中删除项稍微复杂一些。首先,我们将从文档集(SMEMBERS)中获取文档索引成员,然后从单词索引中删除文档id。

>SMEMBERS要是1)“有”2)“猎豹”3)“斑点”>SREM有ex3 > SREM猎豹ex3 > SREM斑点ex3

在Redis中,这不能在单个操作中完成,所以你需要获得SMEMBERS的结果,然后发出SREM命令。

当然,这是一个非常简单的全文搜索。您可以使用Sorted Set命令而不是Set命令创建反射性更强的索引。例如,通过这种方式,如果一个文档不止一次地包含一个单词,那么您可以让它的“排名”高于只出现过一次的文档。除了使用Sorted Set命令外,上述模式基本保持不变。

Baidu