Персонализация контента с помощью yii, sphinx и couchbase
DESCRIPTION
Коротко о компании Онтико и проектах на Yii, которые были реализованы. Проблема персонализации контента. Хранение большого объёма данных в Couchbase. Поиск связанного контента при помощи PHP(Yii) и Sphinx.TRANSCRIPT
Персонализация контента с помощью Yii, Sphinx и Couchbase
Артём Демченков (Онтико)
ООО “Онтико”
Что такое “Персонализация контента?”
Youtube.com
Youtube.com
Виды рекомендованного контента
- Страницы, связанные с уже просмотренными страницами.
- Страницы, связанные с контентом текущей страницы.
- Страницы, связанные с вашими интересами.
- Страницы, специально подобранные вам редактором сайта.
Связь через теги на примере сайта медицинской
тематики
Теги на странице сайта
Исходные данные
- PHP (Yii Framework)
Исходные данные
- PHP (Yii Framework)- 50 000 статей, 100 000 новостей
Исходные данные
- PHP (Yii Framework)- 50 000 статей, 100 000 новостей- 50 000 тегов в MySQL
Исходные данные
- PHP (Yii Framework)- 50 000 статей, 100 000 новостей- 50 000 тегов в MySQL- У каждого тега есть родитель, потомки и связанные теги
Дерево тегов (Каталог медицинских терминов)
Архитектура системы
NGINX PHP SPHINX
Memcache
MySQLCouchbase
Запрос виджета
Упрощенная структура базы данных
med_news
id
title
text
is_publish
med_tags
id
title
is_publish
med_news_tags
id
news_id
tag_id
Sphinx
Для индексации используем запрос:
sql_query = SELECT n.id as id, GROUP_CONCAT(CONCAT('searchtag',t.tag_id)) as news_index FROM med_news n LEFT JOIN med_news_tags t ON t.news_id=n.id WHERE n.is_publish=1 GROUP BY n.id
При поиске передаем Sphinx'у строку вида:
“searchtag1 searchtag2 searchtag3 searchtag4...”
Алгоритм подбора поискового запроса
1. Теги страницы
Алгоритм подбора поискового запроса
1. Теги страницы
2. Дочерние теги каждого из тегов страницы
Алгоритм подбора поискового запроса
1. Теги страницы
2. Дочерние теги каждого из тегов страницы
3. Теги, связанных с каждым из тегов страницы
Алгоритм подбора поискового запроса
1. Теги страницы
2. Дочерние теги каждого из тегов страницы
3. Теги, связанных с каждым из тегов страницы
4. Родитель каждого из тегов страницы
Дерево тегов (Каталог медицинских терминов)
Алгоритм подбора поискового запроса
1. Теги страницы
2. Дочерние теги каждого из тегов страницы
3. Теги, связанных с каждым из тегов страницы
4. Родитель каждого из тегов страницы
А если материалов не хватает, то все сначала :-)
MySQL?
Выходим из мейнстрима
1. Хранит часто используемые данные в оперативной памяти, а редкие на диске.
2. Позволяет удобно реплицировать данные на несколькоcерверов.
http://www.couchbase.com/
Каждый тег в Couchbase
25 = { “n” : 2, “a” : 1, “p” : 156, “d” : “6, 7, 8”, “r” : “35, 56, 33” }
Подбор строки
1. Теги страницы
2. Дочерние теги каждого из тегов страницы
3. Теги, связанных с каждым из тегов страницы
4. Родитель каждого из тегов страницы
Связь Couchbase и Yii (1 способ)
Библиотека,основанная на протоколе Memcached.
Для установки можно положить файлы библиотекив папку /protected/vendors и подключить в /protected/config/main.php
https://github.com/couchbaselabs/php-couchbase
Связь Couchbase и Yii (2 способ)
PHP Client Library
Библиотека написана на С и собирается из исходников.
http://www.couchbase.com/develop/php/current
Связь Sphinx и Yii (1 способ)
Расширение Dgsphinxsearch
Способ установки подробно описан на странице расширения:
http://www.yiiframework.com/extension/dgsphinxsearch
Связь Sphinx и Yii (2 способ)
Sphinx API
Для установки можно положить файл APIв папку /protected/vendors и подключить в /protected/config/main.php
http://code.google.com/p/sphinxsearch/source/browse/trunk/api/sphinxapi.php
И наконец...
1. Поисковый запрос в Sphinx
2. Результат в Memcache
3. И в браузер пользователю