Transcript
Page 1: Интеграция Яндекс Сервер

Drupal .= Яндекс.Сервер;

DrupalConf. Москва. 03.12.2011

Page 2: Интеграция Яндекс Сервер

Кого не хватает?

Page 3: Интеграция Яндекс Сервер

Вот он

FreeBSD 6.3, 7.0 (32/64)

Linux 2.6.x (32/64)

Windows 2000/XP/2003 (32/64)

Файлы

HTTP

Базы данных (ODBC)

Русский Быстрый Гибкий

Page 4: Интеграция Яндекс Сервер

Это и другое

Как yandex.ru Русский, английский, украинский

(морфология, диакри3 тика) Язык запросов

Операторы. Поиск в атрибутах Индексирование без остановки Управление по HTTP. Веб-интерфейс Результаты в XML. C дополнительными

данными

Page 5: Интеграция Яндекс Сервер

Установка (Linux)$ sudo dpkg -i Yandex_Server-2010.9.0-Linux-x86_64.deb$ cat /usr/local/etc/yandex/yandex.cfg$ sudo /etc/init.d/yandex-server.sh restart

http://api.yandex.ru/server/doc/concepts/y-server-ee.xml#quickstart

Page 6: Интеграция Яндекс Сервер

Язык запросов

http://help.yandex.ru/search/?id=1111313

http://api.yandex.ru/server/doc/concepts/query-zones-and-attributes-search.xml

Page 7: Интеграция Яндекс Сервер

Как обычно устроен поиск

Модуль индексирования

Индекс

Модуль поиска

Поиск

Page 8: Интеграция Яндекс Сервер

Есть такой модуль

...

Page 9: Интеграция Яндекс Сервер

... yserverСейчас: http://drupal.org/sandbox/Mir/1343080

Ожидается: http://drupal.org/project/yserver

Зависимости (PHP):PHP SimpleXML ExtensionPHP cURL ExtensionDrupal Search Module [Core]

Page 10: Интеграция Яндекс Сервер

Выгрузка для индексирования

http://your_drupal_site.ru/yserver-dump?mode=force_new&type=strict

http://your_drupal_site.ru/yserver-dump?mode=update&type=queue

http://your_drupal_site.ru/yserver-dump?mode=force_new&type=queue

Cron:*/30 * * * * /usr/bin/wget -O - -q -t 1\http://your_drupal_.site.ru/yserver-dump?mode=update&type=queue\&& /path_to_yserver_script/yserver.sh reindex

Page 11: Интеграция Яндекс Сервер

Выгрузилось для индексирования

Page 12: Интеграция Яндекс Сервер

Области индексирования

function your_module_init() {

if (function_exists('yserver_remove_areas')) {

// Удалим все определенные

// ранее области индексирования.

yserver_remove_areas();

your_module_set_area('node',

array('your_module_get_node_ilist'),

array('yserver_get_node_idata'));

}}

...

Page 13: Интеграция Яндекс Сервер

Задание области индексирования

function your_module_get_node_ilist() {

$query = "SELECT nid, changed FROM {node}

WHERE status = 1";

$result = db_query($query);

$nids = array();

foreach ($result as $record) {

$nids[$record->nid] = $record->changed;

}

return $nids;

}

Получить список (id => время изменения)

Page 14: Интеграция Яндекс Сервер

Задание области индексирования

function your_module_get_node_idata ($nid) {

$node = node_load($nid);

$icontent = '<h1>' . $node->title . '</h1>'

. render(node_view($node, 'full'));

$ialias = drupal_get_path_alias( 'node/' . $nid);

return array(

'content' => $icontent,

'attrs' => array(

'ys_title' => $node->title,

'ys_link' => $ialias,

));

}

Получить для id контент и атрибуты

Page 15: Интеграция Яндекс Сервер

“Чистая” форма поискаfunction your_module_form_search_block_form_alter(&$form,$form_state) { $form['#submit'] = array('your_module_search_box_form_submit');}

function your_module_search_box_form_submit($form, &$form_state) { $form_id = $form['form_id']['#value']; // Текст из поисковой формы. $keys = $form_state['values'][$form_id]; $path = 'search/yserver/' . trim($keys . '@ysoutbox@ys_area:node_article'); //$path .= ' ys_tag:football'; $form_state['redirect'] = $path;}

URL (строка браузера):http://your_drupal_site.ru/search/yserver/зенит чемпион@ysoutbox@ys_area:node_article

Поисковая форма:зенит чемпион

Page 16: Интеграция Яндекс Сервер

Вывод данных в SERPtemplate.php: function your_theme_preprocess_search_result(&$variables) { dvm($variables['result']['ys_attrs']); }

search-result.tpl.php: print $ys_attrs['type'] . ', ' . $ys_attrs['subtype'] . ':::' . $ys_attrs['address']; print $snippet;

Page 17: Интеграция Яндекс Сервер

Конец

СПАСИБО!