Данная инструкция является мануалом по настройке модуля Advanced sphinx для Drupal 7.

Что умеет данный модуль:

1. Ищет по заголовку и телу(body) материала. Поиск по другим полям и сущностям не реализован. Но возможно в ручном режиме настроить поиск по дополнительным полям ноды(инструкция по тому, как это реализовать будет написана позже).

2. Присутствует сортировка(Релевантность/Дата/Обновление).

3. Есть блок поиска, который можно вывести в нужном регионе.

4. Поиск с использованием морфологии(технология стемминга)

Технические подробности:

  1. Соединения с демоном сфинкса происходит через unix-сокет.
  2. Индексация использует в качестве источника данных - базу MySQL.

Инструкция по настройке:

При использовании мануала, нужно заменять:
uXXXX - на аккаунт клиента
имя_домена - на имя домена

  1. Зайти в домашнюю директорию своего хостинг-аккаунта с помощью ssh. Перейти в директорию domains/имя_домена/sites/all/modules/ .
  2. Скачать модуль с помощью команды git clone --branch 7.x-1.x http://git.drupal.org/sandbox/annya/2335563.git advanced_sphinx
  3. Включить модуль в админке сайта.
  4. На странице admin/config/search/advanced_sphinx указываем такие параметры:
    --- Генерировать конфигурационный файл - галочка
    --- Path to confige file:  /home/uXXXX/sphinx/имя_домена
    --- Sphinx searchd host name or path to socket:  /home/uXXXX/sphinx/имя_домена/sphinx.s
  5. В консоли запускаем индексацию демона сфинкса с нужной конфигурацией: /usr/bin/sphinx-indexer --config /home/uXXXX/sphinx/имя_домена/sphinx.conf --all
  6. В консоли запускаем демон сфинкса: /usr/sbin/sphinx-searchd --config /home/uXXXX/sphinx/имя_домена/sphinx.conf
  7. В админке проверяем по ссылке admin/config/search/advanced_sphinx/check-connection - есть ли коннект с демоном сфинкса.
  8. Проверяем работает ли поиск на странице search-content
  9. Выводим блок поиска в нужном регионе.
  10. Настраиваем права на странице admin/people/permissions#module-advanced_sphinx
  11. В задачах по расписанию настраиваем:
    @reboot /usr/sbin/sphinx-searchd --config /home/uXXXX/sphinx/имя_домена/sphinx.conf > /dev/null 2>&1

    */10 * * * * /usr/bin/sphinx-indexer --config /home/uXXXX/sphinx/имя_домена/sphinx.conf --rotate index_delta > /dev/null 2>&1

    10 4 * * * /usr/bin/sphinx-indexer --config /home/uXXXX/sphinx/имя_домена/sphinx.conf --merge index_main index_delta --merge-dst-range deleted 0 0 --rotate > /dev/null 2>&1

    1-ое это поднятие демона после ребута сервера;
    2-ое - индексация новых материалов(дельта-индекс) раз в 10 минут;
    3-ье - мердж(объединение) дельта-индекса и главного индекса раз в день.

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

keereel #
11 лет 9 недель назад
старейшина

Спасибо, всё получилось!
Можно ли после установки этого модуля отключить штатный поиск Друпала?

annya #
11 лет 8 недель назад
гость

Здравствуйте

Да, модуль Advanced sphinx не зависит от модуля Search в ядре Drupal.

andreyst... #
11 лет 6 недель назад
старейшина

А у вас случайно нет какого нибудь тестового Drupal с установленным Sphinx модулем?


annya #
11 лет 6 недель назад
гость

Здравствуйте

Работу модуля вы можете увидеть на этом сайте

it_rpt19... #
11 лет 5 недель назад
старейшина

Поиск по другим полям и сущностям не реализован. Но возможно в ручном режиме настроить поиск по дополнительным полям ноды(инструкция по тому, как это реализовать будет написана позже).

Очень нужна эта инструкция.
Не могу реализовать поиск в разрезе типов материалов.

аргумент fil-type не работает

annya #
11 лет 5 недель назад
гость

Здравствуйте

Пожалуйста, напишите нам тикет с описанием задачи, которую вам необходимо решить.

it_rpt19... #
11 лет 5 недель назад
старейшина

Написал.

petu #
11 лет 1 неделя назад
старейшина

Возможно ли (теоретически) в дополнение к данной конфигурации донастроить фасетный поиск?

Или с фасетами лучше идти на отдельный сервер со своим софторм?

annya #
11 лет 1 неделя назад
гость

Здравствуйте

Фацетный поиск не зависит от того, на каком сервере размещается сайт. Если вы допишите функциональность фацетного поиска к данному модулю он будет работать и на обычном сервере.

petu #
11 лет 1 неделя назад
старейшина

Анна, спасибо за быстрый ответ!

Правильно ли я понимаю, что готового модуля для фасетов под sphinx под семёрку еще нет?

Вроде как в https://drupal.org/project/search_api_sphinx заявляют поддержку Search API facets ?

С уважением,
Петр

annya #
11 лет 1 неделя назад
гость

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

fortis #
11 лет 1 неделя назад
старейшина

жаль только с нодами работает, сущности не индексирует )


annya #
11 лет 5 дней назад
гость

Здравствуйте

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

abix #
11 лет 1 день назад
старейшина

Может стоит поставить вам Apache Solr - тестирую его сейчас на VDS в связке с модулем Search API Solr очень даже вкусная штука, возможностей дофига, поддержка мульти ядер (т.е много сайтов можно закрепить)

В общем я в восторге, жаль, что у вас пока невозможно его использовать. Приходится 1 проект переносить на VDS на сторону. Но поддержка там никакущая в отличии от вашей ))))
Прям душу рвет этот проект, нужен мощный поиск а реализовать его на Sphinx тут не могу! (((

З.Ы. Сделайте дешевенький VDS (рублей в 300-400 и я буду первым кто его придет использовать)

annya #
11 лет 1 день назад
гость

Здравствуйте

Установка Apache Solr в условиях виртуального хостинга может привести к повышенной нагрузки на сервер, поэтому мы предоставляем подобную возможность только на выделенных серверах и SD-тарифах.

К сожалению, внедрение каких-либо VDS-услуг мы также не планируем.

keereel #
10 лет 50 недель назад
старейшина

Модуль не работает корректно, не находит многие материалы. Штатный друпаловский поиск работает хоть и медленнее, но выдаёт все результаты. Буду возвращать обычный поиск на сайт, как ни прискорбно.

dakanca@... #
10 лет 47 недель назад
старейшина

Модуль не удаляется


PDOException: SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'as_sphinxmain': DROP VIEW as_sphinxmain; Array ( ) в функции advanced_sphinx_uninstall() (строка 50 в файле).

annya #
10 лет 47 недель назад
гость

Здравствуйте

Это публичная документация, здесь не нужно размещать запросы в техническую поддержку. Пожалуйста, не указывайте на странице документации конфиденциальную информацию, так как все комментарии находятся в публичном доступе. Напишите нам пожалуйста тикет, чтобы получить ответ на ваш вопрос.

orenvelo #
10 лет 36 недель назад
гость

В индекс сфинкса не попадают ноды, если поле body пустое (фотографии, видео).

Происходит это потому, что вьюшка sphinxmain inner join-нами и условием выбрасывает такие ноды.

Переписал вьюшку:

select
n.`nid` AS `nid`,
n.`vid` AS `vid`,
u.`uid` AS `uid`,
u.`name` AS `name`,
n.`created` AS `created`,
n.`type` AS `type`,
n.`changed` AS `changed`,
fdb.`body_value` AS `body_value`,
nr.`title` AS `title`,
length(nr.`title`) AS `countitl`
from `node` n
left join `node_revision` nr on ( (n.nid = nr.nid) and (nr.`vid` = n.`vid`) and (nr.`timestamp` = n.`changed`) )
left join `users` u on (u.`uid` = n.`uid`)
left join `field_data_body` fdb on ( (n.nid = fdb.entity_id) and (fdb.`revision_id` = n.`vid`) )
where
n.`status` = 1

oiwe #
10 лет 33 недели назад
старейшина

куда вставить этот запрос. в какой файл.

droman #
10 лет 4 недели назад
сисадмин

Здравствуйте.

В файле advanced_sphinx.install в функции advanced_sphinx_install() создается VIEW {$prefix}sphinxmain. Вот в нее и надо внести изменения.
Также перед этим модуль необходимо будет удалить (uninstall) в админке, а после внесения изменений вновь его установить и настроить.

С уважением, Роман Дежин.