Соответствие, ранжирование на основе релевантности каждого критерия - PullRequest
0 голосов
/ 24 июня 2010

У меня есть растущая база данных, содержащая:

  • таблица требований (несколько критериев)
  • таблица предложений (несколько критериев)

Критерии могут быть строковыми (например, название страны), логическим, числовым, ...

Я хотел бы найти все предложения-предложения, которые соответствуют более или менее (немного похоже на работу банков, сватовство, ...)

Если бы в таблицах не было много строк, я бы рассчитал следующее:

  • для каждого спроса рассчитайте для каждого предложения релевантность соответствия путем усреднения релевантности каждого критерия.

Но для важной базы данных это займет слишком много времени, не так ли?

Какое решение вы рекомендуете?

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Чтобы продлить ответ с 24 июня 2010 г., - записать предварительно рассчитанный показатель релевантности в таблицу соединений (ключ спроса, ключ предложения, показатель релевантности). Имейте в виду, что эта таблица соединения может содержать записи Count (требования) * Count (предложения); может быть целесообразно хранить только те записи, баллы релевантности которых превышают некоторое пороговое значение.

Этот подход имеет сложность вычисления O (n) при вставке данных. Вы можете уменьшить эту сложность до O (log (n)), если допущение, что Пространство функций для требований (аналогично предложениям) таково, что две заявки с высокими показателями релевантности для одного и того же предложения также «близки» в пределах Их Характеристика Пространства, содержит:

  • Выполните анализ K-ближайших соседей по функциям сравнения требований (и отдельно для предложений) и ограничьте значение K приблизительно log (n) вашего набора данных.
  • Рассчитать соответствие соответствия между репрезентативными векторами элементов кластеров и сохранить их в таблице базы данных.
  • При вставке измерьте «Расстояние» между новой записью и каждым из кластеров этого типа и сохраните внешний ключ для кластера в новой записи.
  • При поиске предложений, соответствующих спросу - перейдите по ссылкам из запроса на его кластер, чтобы найти наиболее подходящий кластер предложений для отдельных предложений.

Это поменяет специфику на скорость. Проверьте достоверность первоначального предположения, сравнив образец требований с каждым предложением и отсортировав по релевантности; Пройдите через упорядоченный набор предложений и посчитайте, сколько вы найдете в наборе результатов из поиска кластеров, прежде чем найдете тот, который отсутствует. Субъективный анализ этого теста даст вам представление о том, сколько стоит кластеризация.

0 голосов
/ 24 июня 2010

Я бы сделал это так, как вы описали, - но с механизмом непрерывного кеширования и некоторыми индексами.

Определите актуальность при создании, а затем посмотрите, как это происходит.Инкрементные добавления могут быть хорошими, если частота низкая (высокая скорость чтения, низкая запись).Если оно высоко на обоих концах, вы можете разделить его на две базы данных ... обрабатывать обновления на одной, а затем периодически помещать данные после обработки в другую, которая является источником для чтения по умолчанию.

...