Redis - ZRANGEBYSCORE с ключом, соответствующим регулярному выражению - PullRequest
1 голос
/ 22 января 2020

Я пытаюсь получить значение лучшего ключа в отсортированном наборе. Это мой запрос на данный момент:

ZREVRANGEBYSCORE genre1 +inf -inf WITHSCORES LIMIT 0 1 

Это пример добавления в моем наборе:

ZADD "genre1|genre2|genre3" 3.25153 "film"

Я хотел бы использовать запрос таким образом, как это

ZREVRANGEBYSCORE *genre1* +inf -inf WITHSCORES LIMIT 0 1 

для сопоставления ключей, содержащих «... | genre1 | ...», а не только таких ключей, как «genre1». Любая помощь будет оценена

1 Ответ

0 голосов
/ 22 января 2020

Это может быть выполнено в два или три шага:

1) Используйте SCAN или KEYS, чтобы найти keys, соответствующий вашему шаблону .

SCAN 0 MATCH "*genre1*"
1) "9"
2) 1) "genre1|genre2|genre3"
   2) "genre1|genre4"

2) Для каждой клавиши используйте TYPE, чтобы проверить, является ли это отсортированным набором. Это важно только в том случае, если у вас есть другие жанр1 ключи на БД

TYPE "genre1|genre4"
zset

3) Запустите ZREVRANGEBYSCORE <key> +inf -inf WITHSCORES LIMIT 0 1 для каждой клавиши.

См. Этот ответ о том, как вы можете сканировать для данного типа . Вы можете изменить сценарий Lua, включив в него ZREVRANGEBYSCORE, и получать результаты атомарно по одному вызову.

Наконец, рассмотрите вопрос о том, является ли сохранение жанровых комбинаций оптимальным в вашем случае. Вы можете использовать отсортированный набор по жанру, а затем использовать ZUNIONSTORE или ZINTERSTORE, чтобы получить набранные комбинации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...