Как искать наиболее относительные элементы, используя заголовок и теги - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть сеть, в которой основной контент находится слева, а названия соответствующих элементов - в правой полосе, как на Youtube.

Я хочу запросить наиболее относительные элементы, которые будут отображаться на правой полосе, как на Youtube.com.

Дополнительная информация: На странице, отображающей любой элемент, есть заголовок элемента, пиксель, очень краткое описание и теги (не более 5).

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

Что я делаю сейчас, это просто запрашиваю элемент, который имеет похожий тег или теги и отсортирован по количеству просмотров. Это работает очень хорошо для разных предметов, которые не закрыты в истории. Я заметил, что результаты выглядят почти одинаково для элементов, имеющих одинаковый тег (даже если 1 тег). Я думаю, что он должен показать другой результат на любом предмете, как на youtube.com.

Техническая информация: У меня есть основные таблицы: entry, entry_tag, tag.

Таблица ввода магазинов entry_id, title,number of view, number of vote, number of comment, etc.
Таблица entry_tag store entry_id, tag_id

Таблица тегов магазинов tag_id and tag

Мой текущий код выглядит примерно так:

SELECT DISTINCT t1.* FROM entry AS t1
INNER JOIN entry_tag AS t2 ON t1.entry_id=t2.entry_id
INNER JOIN tag AS t3 ON t2.tag_id=t3.tag_id
INNER JOIN tag AS t4 ON t3.tag=t4.tag
INNER JOIN entry_tag  AS t5 ON t4.tag_id=t5.tag_id 
WHERE t5.entry_id={$entry_id} AND t1.entry_id!={$entry_id}
ORDER BY view  DESC
LIMIT 20

Есть идеи или предложения сделать это?

1 Ответ

0 голосов
/ 10 сентября 2011

Похоже, у вас есть дополнительные объединения в вашем запросе, которые не имеют смысла для меня. Я бы сделал запрос, как это ...

select distinct entry.* 
from entry
join entry_tag on (entry.entry_id = entry_tag.entry_id)
join tag on (entry_tag.tag_id = tag.tag_id)
where tag.tag_id in (<comma separated list of tag id's>)
order by entry.number_of_views desc
limit 20

Я бы передал список tag_id на основе тегов текущей статьи, которую вы отображаете. Таким образом, вы получите список всех записей с одинаковым тегом, упорядоченных теми, которые были просмотрены в первую очередь. Возможно, вы также захотите упорядочить по популярности тегов и количеству похожих тегов, чтобы вывести самые модные темы в начало списка с большинством общих тегов.

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