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

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

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

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

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

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

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