2016-11-30 27 views
5

钥匙匹配我在Redis的下列键:短语在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个结果中可以得到什么更好的方法一个查询。

回答

0

我不认为这可以通过glob风格的模式来实现。

我还会注意到,即使存在与所呈现的短语相匹配的模式,由于SCAN的工作原理,您需要遍历整个数据集(进行单独调用)才能获得所需的结果对于。那么你需要考虑你的数据在迭代期间可能会改变的事实。

从文档

需要注意的是后 元素从集合中检索,匹配滤波器应用是很重要的之前 将数据返回给客户端。这意味着如果模式与集合内的元素很少匹配,则SCAN很可能在大多数迭代中都不会返回元素 。

参考:https://redis.io/commands/scan#the-match-option

-

选项1

使用SCAN通过整个数据集进行迭代,并进一步在应用程序级别过滤数据。

选项2

取决于你在寻找什么类型的担保并多少数据你有,你可以使用KEYS。这通常不是推荐的方法,但它是一个可以考虑的选项。

例子: KEYS '*136 mountain*'

很像SCAN方法,你会比你在找什么更大的反应,将需要使用您所选择的语言来进一步筛选结果。

选项3

指数数据通过在应用层面做一些预处理。如果钥匙符合您所需的图案,请将其添加到SET/Sorted Set

选项4

写的Lua脚本。