понедельник, 8 февраля 2010 г.

Taxonomy в типе данных списка интересов

При создании сайта мы особо не думали про то, какой будет тип поля "увлечения", "любимые книги", "часто бываю" и т.д. Поставили текстовое поле, и зря, как выяснилось. ;)
Появилась потребность автоматизировать поиск "похожих" людей, людей, со схожими интересами, одинаковыми любимыми книгами, фильмами, и чтобы выводить все это в едином списке: например: "4 совпадения по книгам, фильмам с пользователем Имярек".

Возникла интересная задача - как разобрать и закешировать всю информацию, что пользователи о себе в этих полях ввели, отбросив окончания, очепятки, предлоги и местоимения.
После разбора данных появилась другая задача - как обезопасить поиск по введенным пользовательским данным.
А потом и третья, как сделать так, чтобы все это работало сразу: только поменял профиль и можешь искать себе подобных.

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

Был написан модуль и (хвала 5 mysql) хранимые процедуры с триггером. Триггер отвечает за вызов хранимой процедуры, хранимая процедура кеширует данные, модуль занимается отображением. И все довольны, от админа до пользователей.

Таксономия - отличная штука. Очень советую не наступать на наши грабли ;)

2 комментария:

  1. А поподробней? Нужно сделать подобную реализацию у себя на сайте, не могу понять с какой стороны подойти. Ничего подобного из готовых решений не нашлось.
    Если у Вас есть модуль выложили бы его на drupal.org =)

    ОтветитьУдалить
  2. Волчар, выложить код модуля не могу, поскольку
    а) я больше не работаю над тем проектом
    б) модуль он был исключительно специфично заточенным по различные term ID, которые использовались у нас.

    Опишу свой алгоритм действий:
    1. Экспорт имеющихся значений из plain text в некие "списки". Эксель, сортировка в помощь.
    2. Создание словарей sql скриптами, на основе полученных списков.
    3. Обратное соотнесение пользователей с полученными списками. Тут сразу скажу, пришлось поработать вручную: одновременно у пользователя было 2 поля: старое текстовое и новое, на таксономии. Вручную копировались и попутно редактировались значения, чтобы избавиться от очепяток. Ужастно трудоемко и неблагодарно совершенно :)
    4. Сам модуль, который считает количество совпадений по разным словарям для отдельного пользователя, вставляя эти данные в табличку.
    5. Дальше по cron шло обновление этой хеширующей таблички.

    Надеюсь, мой совет вам поможет.

    ОтветитьУдалить