2016-11-30 1 views
5

j'ai les clés suivantes: Redisphrases correspondant à des clés dans Redis

"542 136 mountain road" 
"542 136 mountainview road" 
"542136 mountain road" 
"542 136 mountain" 
"136 mountain road" 
"136 mountain" 

Je voudrais obtenir les clés qui contient l'expression 136 mountain. Avec le pattern glob-style, je suis en train de faire 4 requêtes afin de satisfaire tous les cas possibles.

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

scan 0 MATCH '*[\ ]136 mountain' 

scan 0 MATCH '136 mountain[\ ]*' 

scan 0 MATCH '136 mountain' 

Ces quatre requêtes au total retourneraient 4 résultats:

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

S'il vous plaît faire partager vos entrées s'il y a une meilleure façon de changer la chaîne de modèle afin que tous les 4 résultats peuvent être obtenus en une seule requête.

Répondre

0

Je ne crois pas que cela puisse être réalisé avec un motif de type glob.

Je voudrais également noter que même s'il y avait un motif qui correspondait aux phrases présentées, en raison de la nature du fonctionnement de SCAN, vous devriez parcourir tout le jeu de données (faire des appels séparés) pour obtenir les résultats recherchés pour. Ensuite, vous devrez prendre en compte le fait que vos données peuvent changer pendant la période d'itération.

De la documentation

Il est important de noter que le filtre est appliqué après MATCH éléments sont extraits de la collection, juste avant que les données de retour au client. Cela signifie que si le modèle correspond très peu à éléments à l'intérieur de la collection, SCAN ne retournera probablement aucun élément en la plupart des itérations.

Référence: https://redis.io/commands/scan#the-match-option

-

Option 1

Utilisation SCAN pour itérer à travers la totalité du jeu de données et en outre de filtrer les données au niveau de l'application.

Option 2

En fonction de ce type de garanties que vous êtes à la recherche et la quantité de données que vous avez, vous pouvez utiliser CLÉS. Ce n'est généralement pas une approche recommandée, mais c'est une option à considérer.

Exemple: KEYS '*136 mountain*'

Tout comme l'approche SCAN, vous aurez une réponse plus grande que ce que vous recherchez et vous devrez utiliser votre langue de choix pour filtrer davantage le résultat.

Option 3

Index vos données en faisant quelques pré-traitement au niveau de l'application.Si la clé correspond à votre motif souhaité, ajoutez-le à un SET/Trié Set.

Option 4

écrire un script Lua.