Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Пытаюсь реализовать функцию похожих тем на сайте. Думаю брать текущий заголовок и сравнивать его с теми, что есть в базе. Если в заголовке есть одинаковые слова то выводим этот заголовок. Но думаю, что при большом количестве статей это будет ресурсозатратно. Брать каждый заголовок и сравнивать с текущим. Как вы думаете? Может можно как-то по другому? Заранее спасибо за ответы.
EuGen
Отправлено: 30 Января, 2013 - 12:44:53
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Введите тегирование тем - и пусть корректность её будет определяться модераторами, исходя из того, как тема тегирована автором. Тогда задача сведется к простому поиску наличия нужного в тегах темы (а это обычное сравнение на подмножество, основанное на сравнении на равенство)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
assd
Отправлено: 30 Января, 2013 - 14:20:28
Гость
Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Тоесть, нужно завести еще одну колонку в таблице. Потом туда писать одинаковые теги для похожих статей? Это не будет трудоемко опять же парсить теги всех статей на одинаковость?
EuGen
Отправлено: 30 Января, 2013 - 14:28:30
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Нет, у Вас будет отдельная таблица тегов и соотношение будет многие ко многим. Таким образом, помимо таблицы тегов будет еще таблица-связка между темами и тегами. Сама же таблица тем не будет изменена вообще.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
assd
Отправлено: 30 Января, 2013 - 14:34:52
Гость
Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
А что мы в таблице связке держим? какой тег к какому айди относится?
EuGen
Отправлено: 30 Января, 2013 - 14:43:47
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
В таблице-связке будет всего два поля (с единственным ключом, созданным по паре этих полей, и, естественно, являющимся первичным) - это идентификатор темы и идентификатор тега. Таблица призвана установить соответствие между текущим состоянием тем и тегов.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
assd
Отправлено: 30 Января, 2013 - 15:07:05
Гость
Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
По типу, к статье_1 с id=1 в таблице статей, я записываю тег "новость" с id=3 в таблице тегов. Потом к статье_2 с id=5 в таблице статей, я записываю тег "новость" с id=2 в таблице тегов. А в таблице связке получиться 1=>3, 5=>2? Как тогда определить что они похожи?
Я понимаю, что несу чушь, но хочу понять эти связи. Вы уж извините)
Fetis
Отправлено: 30 Января, 2013 - 15:15:12
Частый гость
Покинул форум
Сообщений всего: 153
Дата рег-ции: Дек. 2012 Откуда: Киров, Россия
Помог: 0 раз(а)
1 таблица с новостями: id статьи
2 таблица с тегами: id тега
3 таблица-связка: id статьи и id тега (кокраз о том, о чем говорили выше)
id=1, title='Взбесившийся пони покусал половину посетителей зоопарка!'
id=3, title='Ученые доказали гипотезу Римана!'
id=4, title='О вреде курения'
id=7, title='Ведутся работы над поиском нового онкологического препарата'
Соответственно, Вы хотите тегировать их так - первая, очевидно, является юмористической новостью про животных. Теги: юмор, животные, новости. Вторая - научная сенсация. Теги - математика, новости, открытие. Третья - статья про здоровый образ жизни, тегируем как здоровье. Последняя - очевидно, инновационное решение в области здравоохранения. Теги будут новости, открытие, здоровье. Исходя из этого у Вас будет таблица тегов:
- то есть в таблице содержатся все уникальные теги, которые были собраны при тегировании тем. Получается, что для связи, которая описана выше, достаточно определить таблицу-связку с записями
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
assd
Отправлено: 30 Января, 2013 - 15:32:23
Гость
Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Спасибо за подробный пример, теперь стало более ясно. Я просто думал, что автор статьи сам будет вводить теги, а на самом деле он будет только ставить чекбоксы, к каким тегам относится статья.
А что если, например есть "Статья1. Часть1", "Статья1. Часть2" и так допустим 20 частей статьи. И таких статей с частями масса. Я хочу в первой сказать, что вот есть еще другие части статьи. Тогда нужно будет для каждой такой статьи создавать свой отдельный тег. И тогда это будет не очень удобно. 30-40 тегов выбирать чекбоксами.
EuGen
Отправлено: 30 Января, 2013 - 15:39:25
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Это, скорее, вопрос интерфейса - ну и, конечно же, логики приложения, которая должна предусматривать возможность разбиения статьи на части.
Я бы предложил такое решение - у таблицы статей ввести поле group_id, в которой указывать некоторый идентификатор. Все статьи, имеющие в этом поле одинаковое значение (по названию понятно, что это будет целочисленное поле, но ничто не мешает делать его полем произвольного типа, так как оно нужно только лишь как индикатор того, к какой статье относятся записи) - являются частями одной статьи. То есть сама "статья" хранится в виде своих частей а поле указывает на то, что записи в таблице являюся частями.
Далее, в интерфейсе при создании следующей части существующей статьи автоматически заполнять теги - делать их такими же, как и у статьи - то есть, уточняя, собирать теги из всех предыдущих частей и считать их базовыми для новой части. Однако же давать возможность проставлять в каждой части и свои теги (получится аналог наследования - когда каждая часть наследует теги при создании от предыдущих частей, но может содержать и свои). Тогда получится и гибкость - вариативность тегирования каждой части, и удобство - не нужно будет проставлять никакие лишние теги.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
assd
Отправлено: 30 Января, 2013 - 16:09:31
Гость
Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.