Появилась потребность автоматизировать поиск "похожих" людей, людей, со схожими интересами, одинаковыми любимыми книгами, фильмами, и чтобы выводить все это в едином списке: например: "4 совпадения по книгам, фильмам с пользователем Имярек".
Возникла интересная задача - как разобрать и закешировать всю информацию, что пользователи о себе в этих полях ввели, отбросив окончания, очепятки, предлоги и местоимения.
После разбора данных появилась другая задача - как обезопасить поиск по введенным пользовательским данным.
А потом и третья, как сделать так, чтобы все это работало сразу: только поменял профиль и можешь искать себе подобных.
И вот тут-то стало понятно, что надо выбирать таксономию для хранения всех значений интересов, книг и прочего. Потому что таксономия обеспечит легкий поиск по taxonomy id (а не по тексту), не позволит ввести что-то содержащее sql-иньекции, позволит быстро создавать таблицы кеша, и помогать пользователям выбирать то, что уже было введено до них.
Был написан модуль и (хвала 5 mysql) хранимые процедуры с триггером. Триггер отвечает за вызов хранимой процедуры, хранимая процедура кеширует данные, модуль занимается отображением. И все довольны, от админа до пользователей.
Таксономия - отличная штука. Очень советую не наступать на наши грабли ;)
А поподробней? Нужно сделать подобную реализацию у себя на сайте, не могу понять с какой стороны подойти. Ничего подобного из готовых решений не нашлось.
ОтветитьУдалитьЕсли у Вас есть модуль выложили бы его на drupal.org =)
Волчар, выложить код модуля не могу, поскольку
ОтветитьУдалитьа) я больше не работаю над тем проектом
б) модуль он был исключительно специфично заточенным по различные term ID, которые использовались у нас.
Опишу свой алгоритм действий:
1. Экспорт имеющихся значений из plain text в некие "списки". Эксель, сортировка в помощь.
2. Создание словарей sql скриптами, на основе полученных списков.
3. Обратное соотнесение пользователей с полученными списками. Тут сразу скажу, пришлось поработать вручную: одновременно у пользователя было 2 поля: старое текстовое и новое, на таксономии. Вручную копировались и попутно редактировались значения, чтобы избавиться от очепяток. Ужастно трудоемко и неблагодарно совершенно :)
4. Сам модуль, который считает количество совпадений по разным словарям для отдельного пользователя, вставляя эти данные в табличку.
5. Дальше по cron шло обновление этой хеширующей таблички.
Надеюсь, мой совет вам поможет.