Модули

Advanced sphinx

Сделала на базе sphinxsearch небольшой поисковый модуль. Предложения и тестирование весьма желательны. Первоначально модуль делала под свои нужды, так что все лишнее, на мой взгляд, отсутствует :) Если понадобятся какие-то доработки, буду рада помочь. На d.org будет выложен позднее. Портирование на 7 будет, после отлова мелких багов, при наличии таковых.

Основные отличия от базового:

  • возможность автоматической генерации файла конфигурации;
  • mysql вместо xmlpipe2;
  • минимальные настройки файла конфигурации через админку (работает при автоматической генерации);
  • может еще что-то…

Настройка:

  1. Копируем модуль в «sites/all/modules».
  2. Включаем в админке.
  3. Настройка модуля на странице «admin/settings/advanced_sphinx». Если вы хотите автоматически сгенерировать конфиг, то поставьте галочку «Generate a configuration file». Далее необходимо указать полный путь к папке, в которой храниться sphinx.conf или папку в которой могут быть созданы конфиг и другие папки. Права на запись обязательны. Также на этой странице можете выбрать типы материалов по которым будет осуществлен поиск, если не выбрано, то ищет по всем. Обратите внимание, что при каждом сохранении настроек модуля конфиг будет обновлен, если включена его генерация.
  4. запускаем индексатор /usr/bin/indexer --config /home/user/sphinx/config/sphinx.conf --all . Потом демон сфинкса /usr/sbin/searchd --config /home/user/sphinx/config/sphinx.conf . Все пути подставляйте свои.
  5. проверяем работоспособность на странице «admin/settings/advanced_sphinx/check-connection».
  6. Добавляем для нужных ролей право на использование страницы поиска («use advanced_sphinx») в «admin/user/permissions»
 
 
06.07.2011 — 20:40

Комментарии (12)

Аватар пользователя Stan
06.07.2011 — 21:41
1
 
 

Жирный плюс.

Минусы, что не у всякого хостера есть Сфинкс, да и осталось научить народ пользоваться SSH. В общем будет та же проблема, что и с патчингом модулей уже на рабочем сайте.

Аватар пользователя gagaga
07.07.2011 — 15:13
1
 
 

Не, патчинггг сложнее :) Что касается самого сфинкса, то это известная проблема. Хостеры в основном хотят получать деньги, но над сервером не перетрудятся. В настоящий момент подобными модулями могут пользоваться владельцы выделенных серверов и клиенты IT-patrol.

Аватар пользователя chilic
07.07.2011 — 15:08
1
 
 

Тестим)
Большое спасибо за модуль.

Аватар пользователя gagaga
07.07.2011 — 15:10
1
 
 

Всегда пожалуйста :). Если будут пожелания, пишите.

Аватар пользователя olk
07.07.2011 — 17:19
0
 
 

Ну пожеланий куча :) Вот для начала что в голову пришло …
Поиск контента в том числе по терминам таксономии прикрепленным к ноде
Поиск контента в том числе по содержимому полей CCК прикрепленным к ноде
Возможность мультиконфига (т.е. если на одном хосте несколько сайтов или мультисайт) то что бы конфиг дописывался а не переписывался …
Опционально — поиск по профилям юзеров
Ну и версию для 7-ки побыстрей бы

Аватар пользователя gagaga
07.07.2011 — 19:51
3
 
 

Супер! Примерно в этом направлении модуль развивать и собираюсь. Разумеется не все сразу, но буду стремиться. Спасибо за комментарий :).

Аватар пользователя chilic
01.08.2011 — 10:59
0
 
 

Потестил, афигенно! Стоит на продакшене, без глюков 7 дней.

Аватар пользователя chilic
04.08.2011 — 15:29
0
 
 

Багрепортю, на php 5.3 выкидывает ероры, но работает)
А ещё очень не хватает инструкции.
+ не выдаёт ошибку если не хватает прав создать конфиг.

Аватар пользователя Dan
18.10.2011 — 13:01
1
 
 

Ковыряю модуль, хочу сделать поиск по разным типам контента, ну и ещё по мелочи добавить.

Вот смотрю функцию advanced_sphinx_search_page(), непонятно зачем делается variable_set('advanced_sphinx_keys', $_GET['keys']) — это сохраняет в БД временное значение, которое совсем не нужно между сессиями.
Предлагаю заменить на

global $conf;
$conf['advanced_sphinx_keys'] = $_GET['keys'];

или просто
$GLOBALS['conf']['advanced_sphinx_keys'] = $_GET['keys'];

Ковыряем дальше…

Аватар пользователя chilic
18.10.2011 — 13:39
0
 
 

До вывода ещё не дошёл.
Правил конфиг, для того чтобы учитывались префиксы таблиц.

Аватар пользователя Dan
18.10.2011 — 15:37
0
 
 

Выкладывай :)

Аватар пользователя Dan
18.10.2011 — 15:42
3
 
 

Так. Чтобы добавить фильтр по типам материалов, делаем следующее:

/**
 * Implementation of hook_form_alter.
 */
function ИМЯ_МОДУЛЯ_form_alter(&$form, &$form_state, $form_id){
  if($form_id == 'advanced_sphinx_search_form'){
    $node_types = node_get_types();
    $sphinx_node_types = variable_get('advanced_sphinx_type_filter', array());
    $options = array();
    if(count($sphinx_node_types)){
      foreach($node_types as $name => $params){
        $crc32 = CRC32($name);
        if(isset($sphinx_node_types[$crc32])){
          $options[$crc32] = $params->name;
        }
      }
    }else{
      foreach($node_types as $name => $params){
        $options[CRC32($name)] = $params->name;
      }
    }
    $form['node-types'] = array(
      '#type' => 'checkboxes',
      '#weight' => 0,
      '#title' => 'Фильтр по типам материалов',
      '#options' => $options,
      '#default_value' => array_keys($options),
    );
    $form['#validate'][] = 'ИМЯ_МОДУЛЯ_form_alter_advansed_sphinx_validate';
  }
}
 
/**
 * Hook validate for advansed_sphinx form
 */
function ИМЯ_МОДУЛЯ_form_alter_advansed_sphinx_validate(&$form, &$form_state){
  $form_state['values']['fil-type'] = implode(',', $form_state['values']['node-types']);
}

Описание вкратце: если в настройках модуля определены типы материалов, то они отображаются в фильтре, если не определены — отображаются все типы материлов.

К сожалению, из-за того, что форма поиска формируется, скажем так, не совсем верно, нельзя сохранить выбор пользователи при перезагрузке страницы при поиске. Ждёмс, когда Маша внесёт функционал в модуль.