Немного вводных данных. При добавлении статьи из текста удаляется пунктуация и слова длинной меньше 2-х символов. Дальше слова приводятся к нормальной форме (ед.число, им.падеж) и удаляется всё кроме существительных и латинских слов, считаются вхождения оставшихся слов в тексте, получается эдакие автоматические теги + кол-во их повторений в тексте. Дальше тэги вставляются в две таблички:
CREATE TABLE IF NOT EXISTS `tags` (
`tag_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`content_type` enum('news','article') NOT NULL,
`tag_name` varchar(120) NOT NULL,
`tag_counter` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Number of tag in all texts',
PRIMARY KEY (`tag_id`),
UNIQUE KEY `content_type` (`content_type`,`tag_name`),
KEY `tag_counter` (`tag_counter`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
и
CREATE TABLE IF NOT EXISTS `tagstat` (
`tag_id` int(10) unsigned NOT NULL,
`content_type` enum('news','article') NOT NULL,
`content_id` int(10) unsigned NOT NULL,
`tag_counter` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Number of tag in certain text',
KEY `content_type` (`content_type`,`content_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
В конце концов у нас есть теги статьи, кол-во вхождений тега в статье, общее кол-во вхождений тега по всем текстам. Как бы теперь получить схожие статьи?
Пробовал метод Jaccard similarity/index, уж очень «долгий» запрос получается