Данная инструкция является мануалом по настройке модуля Advanced sphinx для Drupal 7.
Что умеет данный модуль:
1. Ищет по заголовку и телу(body) материала. Поиск по другим полям и сущностям не реализован. Но возможно в ручном режиме настроить поиск по дополнительным полям ноды(инструкция по тому, как это реализовать будет написана позже).
2. Присутствует сортировка(Релевантность/Дата/Обновление).
3. Есть блок поиска, который можно вывести в нужном регионе.
4. Поиск с использованием морфологии(технология стемминга)
Технические подробности:
- Соединения с демоном сфинкса происходит через unix-сокет.
- Индексация использует в качестве источника данных - базу MySQL.
Инструкция по настройке:
При использовании мануала, нужно заменять:
uXXXX - на аккаунт клиента
имя_домена - на имя домена
- Зайти в домашнюю директорию своего хостинг-аккаунта с помощью ssh. Перейти в директорию domains/имя_домена/sites/all/modules/ .
- Скачать модуль с помощью команды git clone --branch 7.x-1.x http://git.drupal.org/sandbox/annya/2335563.git advanced_sphinx
- Включить модуль в админке сайта.
- На странице 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 - В консоли запускаем индексацию демона сфинкса с нужной конфигурацией: /usr/bin/sphinx-indexer --config /home/uXXXX/sphinx/имя_домена/sphinx.conf --all
- В консоли запускаем демон сфинкса: /usr/sbin/sphinx-searchd --config /home/uXXXX/sphinx/имя_домена/sphinx.conf
- В админке проверяем по ссылке admin/config/search/advanced_sphinx/check-connection - есть ли коннект с демоном сфинкса.
- Проверяем работает ли поиск на странице search-content
- Выводим блок поиска в нужном регионе.
- Настраиваем права на странице admin/people/permissions#module-advanced_sphinx
- В задачах по расписанию настраиваем:
@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-ье - мердж(объединение) дельта-индекса и главного индекса раз в день.
Comments (21)
Спасибо, всё получилось!
Можно ли после установки этого модуля отключить штатный поиск Друпала?
Здравствуйте
Да, модуль Advanced sphinx не зависит от модуля Search в ядре Drupal.
А у вас случайно нет какого нибудь тестового Drupal с установленным Sphinx модулем?
Здравствуйте
Работу модуля вы можете увидеть на этом сайте
Поиск по другим полям и сущностям не реализован. Но возможно в ручном режиме настроить поиск по дополнительным полям ноды(инструкция по тому, как это реализовать будет написана позже).
Очень нужна эта инструкция.
Не могу реализовать поиск в разрезе типов материалов.
аргумент fil-type не работает
Здравствуйте
Пожалуйста, напишите нам тикет с описанием задачи, которую вам необходимо решить.
Написал.
Возможно ли (теоретически) в дополнение к данной конфигурации донастроить фасетный поиск?
Или с фасетами лучше идти на отдельный сервер со своим софторм?
Здравствуйте
Фацетный поиск не зависит от того, на каком сервере размещается сайт. Если вы допишите функциональность фацетного поиска к данному модулю он будет работать и на обычном сервере.
Анна, спасибо за быстрый ответ!
Правильно ли я понимаю, что готового модуля для фасетов под sphinx под семёрку еще нет?
Вроде как в https://drupal.org/project/search_api_sphinx заявляют поддержку Search API facets ?
С уважением,
Петр
К сожалению, мне не удалось этот модуль настроить на нашем сервер. Кроме того этот модуль умеет коннектиться с демоном сфинкса только через порт, что делает невозможным его использование на обычном хостинге.
жаль только с нодами работает, сущности не индексирует )
Здравствуйте
К сожалению, да, этот модуль покрывает только базовую функциональность для простых потребностей сайта.
Может стоит поставить вам Apache Solr - тестирую его сейчас на VDS в связке с модулем Search API Solr очень даже вкусная штука, возможностей дофига, поддержка мульти ядер (т.е много сайтов можно закрепить)
В общем я в восторге, жаль, что у вас пока невозможно его использовать. Приходится 1 проект переносить на VDS на сторону. Но поддержка там никакущая в отличии от вашей ))))
Прям душу рвет этот проект, нужен мощный поиск а реализовать его на Sphinx тут не могу! (((
З.Ы. Сделайте дешевенький VDS (рублей в 300-400 и я буду первым кто его придет использовать)
Здравствуйте
Установка Apache Solr в условиях виртуального хостинга может привести к повышенной нагрузки на сервер, поэтому мы предоставляем подобную возможность только на выделенных серверах и SD-тарифах.
К сожалению, внедрение каких-либо VDS-услуг мы также не планируем.
Модуль не работает корректно, не находит многие материалы. Штатный друпаловский поиск работает хоть и медленнее, но выдаёт все результаты. Буду возвращать обычный поиск на сайт, как ни прискорбно.
Модуль не удаляется
Здравствуйте
Это публичная документация, здесь не нужно размещать запросы в техническую поддержку. Пожалуйста, не указывайте на странице документации конфиденциальную информацию, так как все комментарии находятся в публичном доступе. Напишите нам пожалуйста тикет, чтобы получить ответ на ваш вопрос.
В индекс сфинкса не попадают ноды, если поле 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
куда вставить этот запрос. в какой файл.
Здравствуйте.
В файле advanced_sphinx.install в функции advanced_sphinx_install() создается VIEW {$prefix}sphinxmain. Вот в нее и надо внести изменения.
Также перед этим модуль необходимо будет удалить (uninstall) в админке, а после внесения изменений вновь его установить и настроить.
С уважением, Роман Дежин.