Похожие объявления

Тема в разделе "Базы данных", создана пользователем Denixxx, 24 дек 2014.

Модераторы: latteo
  1. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    196
    Здравствуйте.
    Есть база данных доски объявлений.
    Структура таблицы:
    Код:
    CREATE TABLE `board_announcements` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `catid` int(11) NOT NULL COMMENT 'Категория',
      `region` int(11) NOT NULL COMMENT 'Регион',
      `city` varchar(255) NOT NULL COMMENT 'Город',
      `name` varchar(255) NOT NULL COMMENT 'Заголовок',
      `meta_keys` varchar(255) NOT NULL COMMENT 'Meta ключевые слова',
      `meta_desc` varchar(255) NOT NULL COMMENT 'Meta описание',
      `desc` text COMMENT 'Краткое описание',
      `text` text COMMENT 'Полное описание',
      `mode` varchar(255) DEFAULT NULL COMMENT 'Режим публикации',
      `user` varchar(255) NOT NULL COMMENT 'Чьё объявление',
      `price` varchar(255) DEFAULT NULL COMMENT 'Цена',
      `currency` varchar(255) NOT NULL COMMENT 'Валюта',
      `avail` int(5) NOT NULL COMMENT 'Статус объявления',
      `search` text NOT NULL COMMENT 'Поле для поиска по ключевым словам',
      `sort` int(5) DEFAULT NULL COMMENT 'Порядок сортировки',
      `date` datetime NOT NULL COMMENT 'Время изменения',
      `expired` datetime NOT NULL COMMENT 'Окончание публикации',
      PRIMARY KEY (`id`),
      FULLTEXT KEY `name` (`name`,`desc`,`text`,`price`,`search`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
      
    Каким образом ищется в базе похожее объявление? Я имею в виду как вообще это делается? Какой принцип?
     
  2. ArtyGrand

    ArtyGrand Постоялец

    Регистр.:
    6 июн 2009
    Сообщения:
    80
    Симпатии:
    37
    Категория, ключевые слова, может быть цена общая
     
  3. Tibald

    Tibald

    Регистр.:
    16 окт 2007
    Сообщения:
    168
    Симпатии:
    71
    Самое как по мне часто встречающееся - это когда товары в одной категории и делается полнотекстовый поиск по заголовкам.
     
  4. segalp

    segalp Создатель

    Регистр.:
    11 май 2013
    Сообщения:
    11
    Симпатии:
    4
    Все индивидуально, зависит от задачи - предоставить только максимально схожие или предоставить хоть что-то похожее на текущее.
    Могу посоветовать создать табличку со следующей структурой - announcement_id, related_id, weight и заполнять ее данными где последнее - число отражающее насколько схожи объявления.
    Данное решение использовалось в одном из проектов для определения сериалов, которые смотрят вместе, для уменьшения нагрузки на сервер, был скрипт который раз в сутки запускался и формировал данную таблицу. В вашем случае скрипт может запускаться чаще, но и перебирать нужно не все объявления.
     
    Denixxx нравится это.
  5. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    196
    Ну вот это уже похоже на какое-то решение.
    Только как формировать запрос? Полнотекст по полям полного текста объявления + заголовок + краткое описание + ключевики — может быть долгим. Наверное вес назначать каждому из этих полей? Только кажется MySQL этого не умеет. Или я ошибаюсь?
     
  6. segalp

    segalp Создатель

    Регистр.:
    11 май 2013
    Сообщения:
    11
    Симпатии:
    4
    Да может быть, решается организацией очередей и запуска скрипта для заполнения таблицы по крону.

    Именно это я и имел ввиду
     
    Denixxx нравится это.