Мне нужно создать систему поиска совпадений для некоторого набора данных, как показано ниже:
Существует набор объектов, каждый из которых идентифицируется строкой ObjectID
.
Каждый объект имеет ровно N свойств P i . Каждое значение свойства представляет собой строку.
Пример базы данных для N = 3 (в реальной жизни N = 8).
ObjectID: P1 P2 P3 -------------------------------- APPLE: RED ROUND FRUIT ORANGE: ORANGE ROUND FRUIT CARROT: RED LONG VEGETABLE
Система должна возвращать наборы из ObjectID
s, соответствующие заданному запросу по свойствам объекта. В запросе пользователь должен указать все значения свойств. В качестве альтернативы, для некоторых или всех свойств в запросе пользователь может указать «подстановочный знак» *
, означающий, что любое значение свойства будет соответствовать критериям.
Примеры запросов:
P1 P2 P3 => Result ------------------------------------ * ROUND FRUIT => APPLE, ORANGE RED LONG VEGETABLE => CARROT RED * * => CARROT, APPLE
Все это тривиально делается с помощью SQL.
Вопрос в том, есть ли удобный способ сделать это с помощью Redis?
Обратите внимание, что меня интересуют решения на основе Redis специально для целей самообразования; другие БД по этому конкретному вопросу оффтопы.
Обновление: Тривиальное решение с явными списками ObjectID
для каждого P i и фильтрацией на стороне приложения мне не кажется достаточно приятным: -)