@aizhar777

Поиск похожих данных в Mysql?

Добрый вечер!
Пытаюсь найти, более подходящий способ поиска похожих анкет.
У каждого пользователя есть своя анкета,
В таблице есть только 4 тестового поля
это ФИО и коротко о себе,
и остальные поля int от 0 до 3, до 2 и либо 0 либо 1,
поля enum('N','Y')
и ретинг анкеты(не показывается и рассчитывается внутри сайта) от -1000 до 1000,
То есть:
Table:

name | lastname | about | location | col1 | col2 | col3 | col4 и.т.д.
------------------------------------------------------------------------
вася | пупкин | text | loc_id | 0 | 1 | 3 | 0 и.т.д.

так же могу вытащить некоторое кол-во анкет которые нравятся пользователю.

Первыми мыслями было, брать самую популярную анкету по location и на ее основе производить выборку. Потом мне показалось это не очень хорошей идеей, я начал изучать Sphinx и понял что с ним нужно попрактиковаться как минимум несколько дней что бы нормально им пользоватьсья, да и по началу сил Mysql должно хватить.
Сейчас когда писал вопрос пришла мысль, что возможно в Mysql есть возможность усреднить результаты поиска исключив из результата менее похожие и оставляя похожие (друг на друга)? Или может я не туда копаю?
Помогите советом?
И стоит ли оказываться от Sphinx?
  • Вопрос задан
  • 313 просмотров
Пригласить эксперта
Ответы на вопрос 1
alexeygrigorev
@alexeygrigorev
Переворачиватель пингвинов
Данная проблема называется "k-nearest neighbors", и существует очень много способов ее решения.

В целом они все сводятся к этому:

  • Сначала нужно определить функцию расстояния для элементов из таблицы (т.е. юзеров). Это может быть как Эвклидово расстояние, так и любое другое (например, cosine или jaccard для слов из описания)
  • Затем для каждого из юзеров находим N самых близких на основе этой функции
  • Сравнивать всех пользователей со всеми - задача затратная, поэтому часто используются индексы для ускорения этого процесса. На уровне БД это может быть R-tree или quad-tree, а на уровне приложения - Locality Sensitive Hashing.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы