2016-11-30 8 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. С шаблоном в стиле глобуса я в настоящее время делаю 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

Я не верю, что это может быть достигнуто с помощью шаблона в стиле глобуса.

Я также хотел бы отметить, что даже если бы был шаблон, который соответствовал представленным фразам, из-за характера работы SCAN, вам нужно будет перебирать весь набор данных (делая отдельные вызовы), чтобы получить результаты, которые вы ищете для. Тогда вам нужно будет учитывать тот факт, что ваши данные могут меняться в течение периода итерации.

Из документов

Важно отметить, что MATCH фильтр применяется после того, как элементов извлекаются из коллекции, как раз перед возвращением данных клиента. Это означает, что если шаблон соответствует очень маленьким элементам внутри коллекции, SCAN скорее всего не вернет никаких элементов в большинства итераций.

Ссылка: https://redis.io/commands/scan#the-match-option

-

Вариант 1

Используйте SCAN для итерации по всему набору данных и дополнительно фильтровать данные на уровне приложений.

Вариант 2

В зависимости от того, какого типа гарантии вы ищете и сколько данных у вас есть, вы могли бы использовать КЛЮЧИ. Обычно это не рекомендуемый подход, но это вариант рассмотрения.

Пример: KEYS '*136 mountain*'

Многое, как SCAN подход, вы будете иметь больший отклик, чем то, что вы ищете, и нужно будет использовать язык выбора для дальнейшей фильтрации результата.

Вариант 3

Index Ваши данные, выполнив некоторую предварительную обработку на уровне приложений.Если ключ соответствует вашему желаемому рисунку, добавьте его в SET/Сортированный комплект.

Вариант 4

Написать сценарий Lua.