Интеграция Яндекс Сервер
description
Transcript of Интеграция Яндекс Сервер
Drupal .= Яндекс.Сервер;
DrupalConf. Москва. 03.12.2011
Кого не хватает?
Вот он
FreeBSD 6.3, 7.0 (32/64)
Linux 2.6.x (32/64)
Windows 2000/XP/2003 (32/64)
Файлы
HTTP
Базы данных (ODBC)
Русский Быстрый Гибкий
Это и другое
Как yandex.ru Русский, английский, украинский
(морфология, диакри3 тика) Язык запросов
Операторы. Поиск в атрибутах Индексирование без остановки Управление по HTTP. Веб-интерфейс Результаты в XML. C дополнительными
данными
Установка (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
Язык запросов
http://help.yandex.ru/search/?id=1111313
http://api.yandex.ru/server/doc/concepts/query-zones-and-attributes-search.xml
Как обычно устроен поиск
Модуль индексирования
Индекс
Модуль поиска
Поиск
Есть такой модуль
...
... yserverСейчас: http://drupal.org/sandbox/Mir/1343080
Ожидается: http://drupal.org/project/yserver
Зависимости (PHP):PHP SimpleXML ExtensionPHP cURL ExtensionDrupal Search Module [Core]
Выгрузка для индексирования
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
Выгрузилось для индексирования
Области индексирования
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'));
}}
...
Задание области индексирования
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 => время изменения)
Задание области индексирования
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 контент и атрибуты
“Чистая” форма поиска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
Поисковая форма:зенит чемпион
Вывод данных в 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;
Конец
СПАСИБО!