Разрабатывая на одном хосте несколько сайтов с поддержкой Sphinx Search меня всегда раздражала невозможность использования несколько конфигурационных файлов одновременно единственным демоном Sphinx, а также отсутствие простых готовых решений для реализации подобного функционала.
К написанию своего решения этой проблемы меня подтолкнула заметка о том что в качестве конфигурационного файла можно использовать любой скрипт, в том числе написанный на bash‘е.
Для универсального комбинатора конфигурационных файлов использую типичную *nix структуру директорий:
/etc/sphinx/
conf.d/
100-example-domain.ru
200-example-domain-2.ru
999-searchd
sphinx-config.bash
Где conf.d
— директория с симлинками на конфигурационные файлы для индексов, а содержимое файла sphinx-config.bash
#!/bin/bash
WORKDIR=`dirname $0`
CONFDIR="$WORKDIR/conf.d/"
LINE=$(seq -s "#" 70 | sed 's/[0-9]//g')
if [ ! -d "$CONFDIR" ]; then
echo "# Path '$CONFDIR' is incorrect."
exit 1
fi
for file in "${CONFDIR%?}"/*
do
if [[ -f $file ]]; then
FILENAME=$(basename "$file")
echo -e "${LINE}\n# Include file ${FILENAME}\n${LINE}\n"
cat "$file"
fi
done
Далее просто запускаю демона Sphinx, используя в качестве конфигурационного файла sphinx-config.bash
.
/usr/local/sphinx/bin/searchd --config /etc/sphinx/sphinx-config.bash
Готовую реализация залил на GitHub sphinx-config-combinator.