Персонализация контента с помощью yii, sphinx и couchbase

Post on 29-Nov-2014

3.306 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

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. И в браузер пользователю

Спасибо за внимание

Артём Демченков

@ : artem.demchenkov@ontico.ru, ardemchenkov@gmail.com

: ardemchenkov

top related