Персонализированные результаты поиска на основе истории - PullRequest
1 голос
/ 29 июня 2011

Каковы некоторые из методов предоставления персонализированных результатов поиска вошедшему в систему пользователю?Один из способов, который я могу придумать, - это анализ истории посещений пользователя.

Отслеживание : Журнал действий пользователя, таких как просмотренные страницы и нажатие кнопок «Мне нравится», можно использовать для смещения поиска.Результаты.

Вопрос 1 : Как вы отслеживаете историю просмотров пользователя?Таблица со столбцами user_id, number_of_hits, page id?Если у меня 1000 посетителей в день, каждая из которых просматривает в среднем 10 страниц, не будет ли большое количество записей до select каждый раз, когда требуется персональная рекомендация?Таблица будет расти на 300 тыс. Строк в месяц!select строк будет занимать больше и больше времени при каждом поиске. Полагаю, таблица для записи «лайков» будет иметь тот же дизайн таблицы .

Вопрос 2: Как вы смещаете результатыпоиск?Например, если пользователь ищет продукты Apple, как поисковая система realise считает, что пользователю нравятся продукты Apple, и, следовательно, смещает поиск по ним?Пометить страницы и накапливать записи о тэгах на посещенной странице?

Ответы [ 4 ]

0 голосов
/ 29 июня 2011

Я использую MySQL и более 2M записей (просмотров страниц) в месяц, и мы ежедневно и часто запускаем отчеты по этой таблице.

Таблица разбивается по месяцам (как уже предлагалось) и индексируется там, где это необходимо.

Я также очищаю таблицу от данных за 6 месяцев, создав новую таблицу с именем "page_view_YYMM" (YY = год, MM = месяц) и используя при необходимости некоторые UNIONS

для второговопрос, как бы я подошел к этому, создав таблицу со списком ваших продуктов, которая проста:

url, description 

описание будет тегом, лишенным содержимого вашей страницы или элемента (зависит откак вы хотите повлиять на поиск), а затем добавьте полнотекстовый индекс к описанию и поиск по этой таблице, добавив возможные дополнительные термины, которые вы собирали, пока пользователь просматривал ваш сайт, которые вы считаете релевантными (например, название категории,или бренд)

0 голосов
/ 29 июня 2011

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

Прямой подход заключается в следующем:

  1. помещает записи в таблицу / коллекцию какэто:

    метка времени, пользователь, действие, разная информация

(убедитесь, что вы указали как можно больше информации, так что вам не нужно присоединяться к этомутаблица хранилища данных с любой другой таблицей)

  1. разделение по отметке времени (один раздел в месяц)

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

  3. отражают ваши запросы к отчетам и ставят соответствующие разделы локальных индексов

  4. идти только против сводной таблицы с веб-интерфейса

0 голосов
/ 29 июня 2011

Если бы вы хранили только последние результаты X, а не все, это, вероятно, было бы выполнимо.Может замедлить ход событий, но это сработает.Каждый раз, когда вы пишете больше данных и читаете больше данных, это может оказать влияние.Могут помочь правильные методы DBA, такие как индексация и оптимизация запросов, но независимо от того, что вы используете, это повлияет.

Я бы лично посмотрел на сохранение только представления по умолчанию для пользователя в БД и использовалсеанс, чтобы отслеживать остальные.Конечно, при входе в систему не будет истории.Но вы можете воспользоваться этим, чтобы выделить набор специальных страниц, которые, по вашему мнению, являются важными или важными для пользователя.Система подсветки сортов.Быстрее, проще и удобнее для пользователя.

Что касается смещения, вы можете написать набор ключевых слов для каждой записи и отсортировать их соответствующим образом.Не будет ужасно сложно использовать PHP.

0 голосов
/ 29 июня 2011

Вы, вероятно, не хотите использовать реляционную базу данных для такого типа вещей, взгляните на mongodb или cassandra. Это потому, что вы в основном хотите добавить новый столбец в историю пользователя, чтобы база данных, ориентированная на столбцы, имела больше смысла.

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