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

39
Персонализация контента с помощью Yii, Sphinx и Couchbase Артём Демченков (Онтико)

Upload: yiiconf

Post on 29-Nov-2014

3.303 views

Category:

Technology


3 download

DESCRIPTION

Коротко о компании Онтико и проектах на Yii, которые были реализованы. Проблема персонализации контента. Хранение большого объёма данных в Couchbase. Поиск связанного контента при помощи PHP(Yii) и Sphinx.

TRANSCRIPT

Page 1: Персонализация контента с помощью Yii, Sphinx и Couchbase

Персонализация контента с помощью Yii, Sphinx и Couchbase

Артём Демченков (Онтико)

Page 2: Персонализация контента с помощью Yii, Sphinx и Couchbase

ООО “Онтико”

Page 3: Персонализация контента с помощью Yii, Sphinx и Couchbase

Что такое “Персонализация контента?”

Page 4: Персонализация контента с помощью Yii, Sphinx и Couchbase

Youtube.com

Page 5: Персонализация контента с помощью Yii, Sphinx и Couchbase

Youtube.com

Page 6: Персонализация контента с помощью Yii, Sphinx и Couchbase

Виды рекомендованного контента

- Страницы, связанные с уже просмотренными страницами.

- Страницы, связанные с контентом текущей страницы.

- Страницы, связанные с вашими интересами.

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

Page 7: Персонализация контента с помощью Yii, Sphinx и Couchbase

Связь через теги на примере сайта медицинской

тематики

Page 8: Персонализация контента с помощью Yii, Sphinx и Couchbase

Теги на странице сайта

Page 9: Персонализация контента с помощью Yii, Sphinx и Couchbase

Исходные данные

- PHP (Yii Framework)

Page 10: Персонализация контента с помощью Yii, Sphinx и Couchbase

Исходные данные

- PHP (Yii Framework)- 50 000 статей, 100 000 новостей

Page 11: Персонализация контента с помощью Yii, Sphinx и Couchbase

Исходные данные

- PHP (Yii Framework)- 50 000 статей, 100 000 новостей- 50 000 тегов в MySQL

Page 12: Персонализация контента с помощью Yii, Sphinx и Couchbase

Исходные данные

- PHP (Yii Framework)- 50 000 статей, 100 000 новостей- 50 000 тегов в MySQL- У каждого тега есть родитель, потомки и связанные теги

Page 13: Персонализация контента с помощью Yii, Sphinx и Couchbase

Дерево тегов (Каталог медицинских терминов)

Page 14: Персонализация контента с помощью Yii, Sphinx и Couchbase

Архитектура системы

NGINX PHP SPHINX

Memcache

MySQLCouchbase

Запрос виджета

Page 15: Персонализация контента с помощью Yii, Sphinx и Couchbase

Упрощенная структура базы данных

med_news

id

title

text

is_publish

med_tags

id

title

is_publish

med_news_tags

id

news_id

tag_id

Page 16: Персонализация контента с помощью Yii, Sphinx и Couchbase

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...”

Page 17: Персонализация контента с помощью Yii, Sphinx и Couchbase
Page 18: Персонализация контента с помощью Yii, Sphinx и Couchbase

Алгоритм подбора поискового запроса

1. Теги страницы

Page 19: Персонализация контента с помощью Yii, Sphinx и Couchbase

Алгоритм подбора поискового запроса

1. Теги страницы

2. Дочерние теги каждого из тегов страницы

Page 20: Персонализация контента с помощью Yii, Sphinx и Couchbase

Алгоритм подбора поискового запроса

1. Теги страницы

2. Дочерние теги каждого из тегов страницы

3. Теги, связанных с каждым из тегов страницы

Page 21: Персонализация контента с помощью Yii, Sphinx и Couchbase

Алгоритм подбора поискового запроса

1. Теги страницы

2. Дочерние теги каждого из тегов страницы

3. Теги, связанных с каждым из тегов страницы

4. Родитель каждого из тегов страницы

Page 22: Персонализация контента с помощью Yii, Sphinx и Couchbase
Page 23: Персонализация контента с помощью Yii, Sphinx и Couchbase
Page 24: Персонализация контента с помощью Yii, Sphinx и Couchbase
Page 25: Персонализация контента с помощью Yii, Sphinx и Couchbase
Page 26: Персонализация контента с помощью Yii, Sphinx и Couchbase
Page 27: Персонализация контента с помощью Yii, Sphinx и Couchbase

Дерево тегов (Каталог медицинских терминов)

Page 28: Персонализация контента с помощью Yii, Sphinx и Couchbase

Алгоритм подбора поискового запроса

1. Теги страницы

2. Дочерние теги каждого из тегов страницы

3. Теги, связанных с каждым из тегов страницы

4. Родитель каждого из тегов страницы

А если материалов не хватает, то все сначала :-)

Page 29: Персонализация контента с помощью Yii, Sphinx и Couchbase

MySQL?

Page 30: Персонализация контента с помощью Yii, Sphinx и Couchbase

Выходим из мейнстрима

Page 31: Персонализация контента с помощью Yii, Sphinx и Couchbase

1. Хранит часто используемые данные в оперативной памяти, а редкие на диске.

2. Позволяет удобно реплицировать данные на несколькоcерверов.

http://www.couchbase.com/

Page 32: Персонализация контента с помощью Yii, Sphinx и Couchbase

Каждый тег в Couchbase

25 = { “n” : 2, “a” : 1, “p” : 156, “d” : “6, 7, 8”, “r” : “35, 56, 33” }

Page 33: Персонализация контента с помощью Yii, Sphinx и Couchbase

Подбор строки

1. Теги страницы

2. Дочерние теги каждого из тегов страницы

3. Теги, связанных с каждым из тегов страницы

4. Родитель каждого из тегов страницы

Page 34: Персонализация контента с помощью Yii, Sphinx и Couchbase

Связь Couchbase и Yii (1 способ)

Библиотека,основанная на протоколе Memcached.

Для установки можно положить файлы библиотекив папку /protected/vendors и подключить в /protected/config/main.php

https://github.com/couchbaselabs/php-couchbase

Page 35: Персонализация контента с помощью Yii, Sphinx и Couchbase

Связь Couchbase и Yii (2 способ)

PHP Client Library

Библиотека написана на С и собирается из исходников.

http://www.couchbase.com/develop/php/current

Page 36: Персонализация контента с помощью Yii, Sphinx и Couchbase

Связь Sphinx и Yii (1 способ)

Расширение Dgsphinxsearch

Способ установки подробно описан на странице расширения:

http://www.yiiframework.com/extension/dgsphinxsearch

Page 37: Персонализация контента с помощью Yii, Sphinx и Couchbase

Связь Sphinx и Yii (2 способ)

Sphinx API

Для установки можно положить файл APIв папку /protected/vendors и подключить в /protected/config/main.php

http://code.google.com/p/sphinxsearch/source/browse/trunk/api/sphinxapi.php

Page 38: Персонализация контента с помощью Yii, Sphinx и Couchbase

И наконец...

1. Поисковый запрос в Sphinx

2. Результат в Memcache

3. И в браузер пользователю

Page 39: Персонализация контента с помощью Yii, Sphinx и Couchbase

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

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

@ : [email protected], [email protected]

: ardemchenkov