Поиск¶
Хотя в Drupal может использовать встроенный в РСУБД поиск, в ELiS используется отдельный поисковый сервер Manticore.
Manticore - быстрый отечественный поисковый сервер с предопределяемой схемой хранения, созданный на базе Sphinx.
Сервер написан на С и поддерживает обращение к себе как по SQL, так и по HTTP.
Установка сервера¶
Сервер устанавливается автоматически при установке ELiS на тот же сервер, где будет работать электронная библиотека и автоматически настраивается. Руками ничего делать не надо.
При необходимости, сервер может быть вынесен на отдельное оборудование.
Для установки на отдельном сервере скопируйте с сервера с Drupal файл /etc/yum.repos.d/manticore.repo на сервер для поиска, установите Manticore командой # dnf install manticore и перенести файл конфигурации сервера с Drupal файл /etc/manticore/manticore.conf. Добавить автозагрузку можно systemctl enable manticore и запустить systemctl start manticore. Укажите куда надо подключить сервер на сайте ELiS admin/config/search/elis.
Настройка¶
ELiS обеспечивает команды drush для настройки сервера.
drush elis-search-reconfigure¶
Производит генерацию файла /etc/manticore/manticore.conf из полей в Drupal.
Manticore надо задать предварительно конфигурацию полей которые он будет индексировать и если вы добавили или удалили в Drupal поля, необходимо произвести заново генерацию конфигурации Manticore с перезапуском сервера.
Конфигурация:
# cd /var/www/vh/library
# su elis
$ drush elis-search-reconfigure
$ exit
# systemctl stop manticore
# systemctl start manticore
Если файл конфигурации не изменился, добавьте пользователю elis права на запись на него:
# chown manticore:elis /etc/manticore/manticore.conf
# chmod 0664 /etc/manticore/manticore.conf
drush elis-search-reindex¶
В некоторых случаях требуется полностью перестроить поисковый индекс, для чего и выполняется команда elis-search-reindex.
Команда проходит по всем сущностям в Drupal и обновляет их в поисковом индексе.
Если команда прервется, повторный запуск команды продолжит с места прерывания.
При этом команда не удаляет старый индекс, а обновляет для всех существующих сущностей в Drupal.
При большой базе вероятно падение при переиндексации из-за исчерпания памяти. При этом ошибка будет содержать слова Error: Allowed memory size of … exhausted (tried to allocate … bytes). Это нормально, просто повторно запустите переиндексацию
Если при индексировании и повторном запуске происходит падение в одном и том же месте, повторный запуск индексирования пропустит сбойную ноду. Если не помогает, выполните:
drush vget elis_sphinx_search_rebuild_last_nid
В результате увидите номер ноды на которой происходит сбой (например 1234). Чтобы пропустить индексирование этой ноды, добавьте единицу к номеру сбойной (1234+1=1235) и продолжите индексирование:
drush vset elis_sphinx_search_rebuild_last_nid '1235'
drush elis-search-reindex
При успешном окончании последней строкой будет:
Real-time index rebuild completed
Если у вас реиндексирование регулярно прерывается, вы можете запустить его в цикле, например 10 раз:
su elis
for ((i=0; i<10; i++)); do cd /var/www/vh/library; drush elis-search-reindex; done
Полная перестройка индекса с удалением старого¶
В некоторых случаях (существенное изменение конфигурации поискового сервера или возникающие ошибки) может потребоваться удалить старый индекс и создать новый.
Для этого надо остановить поисковый сервер, удалить старый индекс, запустить поисковый сервер, запустить повторное индексирование.
Делается это так:
# systemctl stop manticore
# rm -Rf /var/lib/manticore/*.*
# rm -Rf /var/lib/manticore/binlog/*
# cd /var/www/vh/library
# su elis
$ drush elis-search-reconfigure
$ exit
# systemctl start manticore
# su elis
$ drush elis-search-reindex
$ exit
Если будет прерывание переиндексирования (на этапе drush elis-search-reindex) просто запускайте индексирование несколько раз, пока оно не закончится. Прогресс виден в https://elis.example.com/admin/reports/dblog.
Порты сервера¶
По умолчанию сервер слушает адрес 127.0.0.1 и порты 9308, 9306, 9312. Проверить можно командой netstat -tnlp.
Сервер не использует авторизацию для создания в него запросов, поэтому в случае изменения сетевых настроек необходимо убедиться, что эти порты не открыты неавторизованному доступу.
Веса для поиска по полям¶
Попадание термина поискового запроса увеличивает ранг документа (см. документацию к ранкеру sph04 https://manual.manticoresearch.com/Searching/Sorting_and_ranking). Ранг попадание в отдельные поля суммируется по некоторой формуле и в результате строится ранг документа по отношению к поисковому запросу.
Можно в ручном режиме управлять весами попаданий терминов в отдельные поля, чтобы улучшать качество поиска. Так если увеличить вес попадания в поле title, попадание поискового термина в заголовок ресурса будет давать больший вклад чем попадание в текст, а значит документы будут двигаться в выдаче выше попаданий в фрагменты документов.
В ELiS уже есть преднастроенное увеличение веса для некоторых полей, но вы можете добавить или переопределить вес по любому полю в настройках поиска на странице admin/config/search/elis
Формат записи в текстовом поле - валидный JSON:
{
"fieldWeights": ["title":10,"email":30,"text":1]
}
Как узнать какие поля можно использовать? Все допустимые поля можно посмотреть в /etc/manticore/manticore.conf, где они указаны после rf_field. Так строка “rf_field: classification” означает, что имя поля “classification”, причем это поле соответствует “field_classification”.
Следует обратить внимание, что поля в Drupal обычно начинаются на “field_”, в то время как в поиске этот “field_” отрезается, чтобы удобней было формировать поисковые запросы, т.о. “field_classification” в Drupal будет соответствовать “classification” в поиске, а для попадания в поисковый запрос следует формировать его как “@classification searchedKeyword”.