Немного открытого, как бы вы подошли к этому типу ситуации, вопрос.
Я строю систему, в которой пользователю предлагается выбрать любое количество элементов из списка категорий.,Для каждой категории, которую они выбирают, их просят назначить ей вес (значение или 1-100 важности).Я думаю, что лучший способ описания этих пользовательских категорий - это взвешенные теги.Таким образом, я мог бы действительно наслаждаться едой бананов, которые получают 100, в то время как яблоки, которые я очень наслаждаюсь, получают 50. Я ненавижу сливы, поэтому я не выбираю это.
Некоторые другие объекты в системе будут делатьточно так же и будет иметь свой собственный набор тегов, каждый с весом.В вышеприведенном сценарии предметом может быть «Ферма», и их выход для каждого типа фруктов представляет собой весовые значения.То, что я хочу найти, - это лучшие фермы по вкусу пользователя (например).Это может выглядеть примерно так:
Пользователь A: [Tag1: 100, Tag2: 50, Tag4: 10]
Элемент A: [Tag2: 40, Tag3: 20]
Элемент B: [Tag1: 100, Tag2: 50, Tag4: 10]
Item C: [Tag3: 20, Tag4: 5]
В этомВ этой ситуации пункт B, очевидно, идеально подходит для пользователя A, поэтому он будет лучшим в наборе результатов.Что я действительно хочу, так это система, которая может упорядочивать элементы по убыванию релевантности для определенного пользователя.
Я играл с реализациями SQL и NoSQL (redis), пытаясь найти решение, но каждый раз яя перебираю довольно большой набор данных и выполняю базовые математические операции с каждым тегом в каждом элементе, чтобы вычислить общую разницу.Хотя это работает, оно будет медленным, и если мы говорим о системе с тысячами «Предметов», я бы предположил, что это будет поставлено на колени довольно быстро.
Я не могуПодумайте, как реализовать это непосредственно в SQL, учитывая, что в трех сущностях (элемент, пользователь, категория / тег) задействованы два стилевых отношения «многие ко многим».Я даже не могу начать думать о том, как можно сравнивать весовые значения из объединенных таблиц User-Category и Item-Category в SQL для получения окончательного результата.
Я предполагаю, что спрашиваюдля, есть несколько идей о том, как даже приблизиться к этой идее.
Приветствия Джон