Соответствие взвешенным тегам самым близким способом - PullRequest
2 голосов
/ 25 июля 2011

Немного открытого, как бы вы подошли к этому типу ситуации, вопрос.

Я строю систему, в которой пользователю предлагается выбрать любое количество элементов из списка категорий.,Для каждой категории, которую они выбирают, их просят назначить ей вес (значение или 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 для получения окончательного результата.

Я предполагаю, что спрашиваюдля, есть несколько идей о том, как даже приблизиться к этой идее.

Приветствия Джон

1 Ответ

1 голос
/ 25 июля 2011

Проблема, которую вы пытаетесь решить, связана с проблемой ближайший сосед , которая для помеченных данных, как вы упомянули, может быть решена с использованием различных структур данных.Я не очень разбираюсь в SQL, но держу пари, что если вы будете искать алгоритмы для ближайшего соседа, вы найдете что-то, похожее на то, что вы хотите.

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