Я полностью согласен с тем, что @GuyKorland сказал, что вы должны использовать зрелый продукт, такой как RediSearch
, чтобы не реализовывать пользовательскую поисковую систему, основанную на redis.
Однако,Я очень рад просто рассказать о том, как реализовать простую поисковую систему с использованием структуры данных Redis, основываясь только на моих знаниях о Redis.
Во-первых, как хранить данные о клиентах, например, о вашем клиенте. в редис. Вы знаете, redis - это база данных KV в памяти, так что вы можете сохранять объект или данные json в виде структуры redis Hash
со своим ключом, используя уникальный префикс Id
&, как показано ниже.
CUSTOM#123 =>
Id => 123
Name => Bob Smith
Age => 72,
Postcode => AB123EF
Email => bobsmith@anon.com
Telephones#0 => 07710123456
Telephones#1 => 01453123456
Во-вторых, чтобы построить индексы для всех свойств класса объекта, используя структуру redis List
или Sorted Set
, как показано ниже.
Например, используя List
для Name
иAge
свойства. Идея состоит в том, чтобы использовать префикс, такой как NAME
concat, значение Name
объекта, такого как Bob
, с символом #
, чтобы создать ключ redis и сохранить значение Id
как элемент redis List
.
\\ To build `NAME` index for all objects contains `Bob`, `Smith` and `Bob Smith` in the `Name` propertory
NAME#Bob => 123, ...
NAME#Smith => 123, ...
NAME#Bob Smith => 123, ...
\\ Do the same operation above to build `AGE` index
AGE#72 => 123, ...
Наконец, вы можете искать Bob
в ключах redis с префиксом NAME#
, используя команду GET NAME#Bob
, чтобы получить список клиентов Id
точно, или команду keys NAME#Bob*
, чтобы получитьсписок клиентов Id
нечеткий, то вы можете непрерывно получать эти данные клиента, содержащие свойство Name
со значением Bob
. Если вы хотите отсортировать список клиентов Id
, вы должны использовать Sorted Set
вместо List
для сортировки результатов списка Id
.
Я все же рекомендовал вам использовать зрелый продукт на основена Redis, например, RediSearch
, это поможет вам быстро реализовать ваши потребности.