redis中关键字的短语匹配

redis中关键字的短语匹配,redis,pattern-matching,glob,Redis,Pattern Matching,Glob,我在redis中有以下键: "542 136 mountain road" "542 136 mountainview road" "542136 mountain road" "542 136 mountain" "136 mountain road" "136 mountain" 我想得到包含短语136 mountain的钥匙。 对于glob样式的模式,我目前正在进行4次查询,以满足所有可能的情况 scan 0 MATCH '*[\ ]136 mountain[\ ]*' scan 0

我在redis中有以下键:

"542 136 mountain road"
"542 136 mountainview road"
"542136 mountain road"
"542 136 mountain"
"136 mountain road"
"136 mountain"
我想得到包含短语
136 mountain
的钥匙。 对于glob样式的模式,我目前正在进行4次查询,以满足所有可能的情况

scan 0 MATCH '*[\ ]136 mountain[\ ]*'

scan 0 MATCH '*[\ ]136 mountain'

scan 0 MATCH '136 mountain[\ ]*'

scan 0 MATCH '136 mountain'
这四个查询总共将返回4个结果:

"542 136 mountain road"
"542 136 mountain"
"136 mountain road"
"136 mountain"

如果有更好的方法更改模式字符串,以便在一次查询中获得所有4个结果,请分享您的输入。

我不相信使用全局样式模式可以实现这一点

我还要指出的是,即使有一个模式与所提供的短语相匹配,由于扫描工作的性质,您也需要迭代整个数据集(进行单独调用)以获得您所寻找的结果。然后,你需要考虑在迭代期间你的数据可能会改变的事实。

来自文档

需要注意的是,匹配过滤器是在 在返回数据之前,从集合中检索元素 给客户。这意味着,如果模式匹配很少 集合中的元素,扫描可能不会返回集合中的任何元素 大多数迭代

参考:

--

选项1

使用扫描遍历整个数据集,并在应用程序级别进一步过滤数据

选项2

根据您要寻找的担保类型和数据量,您可以使用键。这通常不是一个推荐的方法,但它是一个可以考虑的选项。 例如:
key'*136 mountain*'

扫描方法非常相似,您将获得比您所寻找的更大的响应,并且需要使用您选择的语言来进一步过滤结果

选项3

通过在应用程序级别执行一些预处理来索引数据。如果键与所需模式匹配,则将其添加到集合/排序集合

选项4

写一个Lua脚本