Запрос GEO с несколькими условиями - PullRequest
0 голосов
/ 18 октября 2018

Я рассматриваю возможность использования Redis для одного сценария (для повышения производительности и по другим причинам), который кажется довольно простым для реализации с использованием «обычной» базы данных, но я не могу понять, как реализовать его с помощью Redis:

Давайте представим, что у меня есть куча магазинов, и у каждого магазина есть координаты и набор атрибутов, таких как "велосипеды", "автомобили", "цветы", "бакалея":

shop1: lon1, lat1, "bikes", "cars"
shop2: lon2, lat2, "flowers", "groceries"
shop3: lon3, lat3, "flowers", "groceries", "cars", "bikes"
...and etc.

Как наиболее эффективным способом найти 5 ближайших к какой-либо точке магазинов, имеющих атрибуты «автомобили» и «цветы»?

Похоже, довольно просто запросить все магазины рядом с какой-то позицией, но как тогдая могу отфильтровать только магазины с определенными атрибутами?

1 Ответ

0 голосов
/ 18 октября 2018

Самый простой способ - создать набор для каждой категории / фасета:

SADD bikes shop1 shop3
SADD cars shop1 shop3
SADD flowers shop2 shop3
SADD groceries shop2 shop3

Выполнить GEORADIUS ... STORE <some-temporary-key>, а затем вы можете позвонить SINTER <some-temporary-key> cars flowers, чтобы ответить на ваш запрос.

Примечаниеэто «самое простое» не обязательно означает «самое эффективное», но это другой вопрос.Альтернативой является использование RediSearch .

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