Какая система поиска / тегов лучше? - PullRequest
4 голосов
/ 13 января 2010

Я работаю над веб-сайтом, на котором есть пользователи и пользовательские статьи, галереи и видео. Я пытаюсь создать систему тегов и найти их все.

Сначала я думал в tbl_articles, tbl_galleries и tbl_videos, что у меня будет заголовок, описание и поле тегов. Затем выполните запрос, подобный следующему для каждого:

select * from tbl_articles where match(title, description, tags)
  against ('$search' in boolean mode) ORDER BY match(title, description, tags)
  against ('$search' in boolean mode) DESC, views desc LIMIT 0, 3

Один и тот же запрос для tbl_galleries и tbl_videos. Для пользователей просто сравните имя пользователя. Затем отобразите по три на странице результатов с помощью кнопки «еще» (стиль facebook).

При просмотре статьи, галереи или видео также будут ссылки на связанный контент, поэтому я думал об использовании одного и того же запроса только с LIMIT, установленным в '1,3', чтобы не показывать себя.

Q1 - Как эта система?

Я был доволен системой, пока не нашел этот

В котором они имеют

  • таблица тегов, которая содержит два столбцы первичный идентификатор и уникально проиндексированное tag_name.
  • таблица типа, для которой они имеют другой первичный идентификатор и уникально Индексированный тип (категория) (я думал Я мог бы использовать это для пользователь / видео / статьи / галерея)
  • таблица поиска, которая содержит URL статьи с иностранным идентификатором из тегов и типа. (Я думал вместо полного URL я мог бы просто сохранить соответствующий внешний идентификатор, чтобы Я могу создать URL, например, article.php? ID = ....)

Q2 - Эта система кажется гораздо более эффективной ... хотя как бы я поискал название или описание?

Q3 - Еще одна плохая вещь для каждого просмотра страницы, я должен был бы объединить теги ... так что это может быть не намного эффективнее.

Q4 - Моя система также выполняет поиск только по логическим значениям. Могу ли я быть лучше с запросом 'like'?

Q5 - я ограничиваю своих пользователей четырьмя тегами, но я рекомендую одно слово (стиль stackoverflow) ... Я понимаю, что в моей системе поиск по запросу "вокзал" не будет соответствовать тег как «вокзал», как мне обойти это?

Так много вопросов ... Извините, что так долго. Спасибо.

1 Ответ

2 голосов
/ 13 января 2010

Q1 - вам лучше иметь три отдельные таблицы для статей, теги и таблицу ссылок, связанных со статьями и тегами. Вы также можете сделать это с двумя таблицами для статей и таблицей article_tags. Таблица article_tags будет содержать поле articleID и сам тег как составной ключ. Две или три таблицы позволяют легко определить, какие статьи имеют данный тег и какие теги назначены данной статье.

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

Q3 - не беспокойтесь о соединении таблиц тегов с другими. Перефразируя Кнута, сначала постройте его, а затем найдите узкие места. MySQL очень хорош в том, что делает. Соединение этих столов снова и снова и снова не повредит.

Q4 - Это зависит от того, что вы хотите получить из результатов. обычно вам нужны фактические данные, а затем вы можете просто проверить количество возвращаемых строк, чтобы узнать, является ли оно истинным или ложным.

Q5 - опять же, вам придется использовать синтаксис «like» и, возможно, какое-нибудь творческое регулярное выражение на стороне PHP, прежде чем запрос будет передан в базу данных.

удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...