Я хотел бы посмотреть, окажет ли миграция набора данных из PostgreSQL в Redis положительное влияние на конкретный поисковый запрос. К сожалению, я не знаю, как организовать ключи и значения.
Я хочу, чтобы пользователи могли предоставлять список свойств, а приложение доставляет список элементов в порядке возрастания свойств, которые не были введены.
Например:
Item #1 { prop1, prop2, prop4, prop7 } Query: "prop1 prop3 prop4 prop5"
Item #2 { prop7, prop8 } Result: Item #3
Item #3 { prop2, prop3, prop5 } Item #1
Item #2
Что я придумала до сих пор:
#!/usr/bin/python
properties = (1, 3, 4, 5)
items = ["Properties:%s:items" % id for property in properties ]
redis.zunionstore("query:related_items", items)
redis.zinterstore("query:result", { "Items:all": 1, "query:related_items": -1 })
Это создает отсортированный набор Item
с (все с оценкой 1), которые связаны с введенными пользователем Property
с. После этого вычисляется пересечение с отсортированным набором всех Items
(где оценка каждого значения - это число Property
с). Веса установлены, чтобы создать счет 0, если все Property
с Item
предоставлены в запросе.
Поскольку число Item
s составляет около 600 000 записей, этот запрос занимает приблизительно 4-6 секунд. Есть ли лучший способ сделать это?