Как установить и настроить поиск sphinx в Linux?
Инструкция была написана для системы Ubuntu/Debian, но такой-же принцип используется на любой ОС Linux.Чем хорош поиск sphinx? Тем, что он способен сделать выборку из гигантской базы при минимальных затратах на ресурсы и минимальном времени, так же используется свой индекс, и при поиске обращение идет к его индексу, а не к базе данных, что в свою очередь минимизирует нагрузку. Использование sphinx для масштабных проектов неотъемлемая часть, так как оптимизация, всегда играет важную роль.
Установка и настройка
Команда установки:
Создание конфигурационного файла.sudo apt-get install sphinxsearch
В конфиг файл следующееsudo nano /etc/sphinxsearch/sphinx.conf
#############################################################################
## data source definition
#############################################################################
source entityprefixSource
{
type = mysql
sql_host = localhost
sql_user = TYT USER
sql_pass = TYT PASSWD
sql_db = TYT BAZA
sql_port = 3306
sql_sock = /var/run/mysqld/mysqld.sock
mysql_connect_flags = 32 # enable compression
#Кодировка
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
}
source entityprefixArticlesSource : entityprefixSource
{
#Ваш запрос для выборки из базы в index sphinx
#Валидные запросы mysql, pgsql, mssql
#Обращение к таблицам: tablea, tableab, tableuser. используется для корректной выборки.
#Пример:
sql_query = \
SELECT tablea.article_id, tablea.article_title, UNIX_TIMESTAMP(tablea.article_date_add) as article_date_add, \
tableab.article_text, tableab.article_publication, tableuser.username_login \
# Обращение к таблицам
FROM dbprefix_article tablea, dbprefix_article_body tableab, dbprefix_user tableuser \
# Выборка, только из тех, которые опубликованы.
WHERE tablea.article_id=tableab.article_id AND tablea.article_publication=1 \
# Образуем начало и конец запросов для выборки, что бы небыло бесконечного цикла
AND tablea.article_id>=$start AND tablea.article_id<=$end
# Объединение полей для разгрузки запроса.
#Пример:
sql_joined_field = tags from query; select article_id, atricle_tag \
from dbprefix_article_tag order by article_id ASC
# Запрос, указанный в этой опции должны быть с минимальным идентификатором и максимальным, которые будут использоваться в качестве границ диапазона. Запрос должен возвращать ровно два целочисленных поля, мин ID первого и второго макс ID; имена полей игнорируются.
sql_query_range = SELECT MIN(article_id),MAX(article_id) FROM dbprefix_article
#Диапазон Начало и Конца выборки, необязательный, по умолчанию 1024
# Выборка начало 1, конец 1000
# след. начало 1001, конец 2002
# след. начало 2003, конец 3002
# шаг равен 999.
sql_range_step = 1000
# Таблица декларации
sql_attr_bool = article_publication
# Поле хранение даты
sql_attr_timestamp = article_date_add
# Несколько значений для одного параметра
sql_attr_multi = uint tag from query; SELECT article_id, article_tag_id FROM dbprefix_article_tag
}
#Такой шаблон можно использовать для любой выборки, например: записей, комментариев, статусов и т.д. Замените название таблиц и полей.
#############################################################################
## index definition
#############################################################################
#Индексация
index entityprefixarticlesIndex
{
# Исходник выборки
source = entityprefixArticlesSource
# Путь до файла хранения выборки
path = /var/lib/sphinxsearch/data/entityprefix/articlesIndex
# Путь до файла жаргона слов
wordforms = /var/lib/sphinxsearch/data/entityprefix/wordforms.txt
# Необязательный, по умолчанию extern
# Как будет храниться информация, варианты: none | extern | inline
docinfo = extern
# Необязательный, по умолчанию пустой
# При поиске слова: собак, собака, собаку - в результате одно и тоже.
# Возможные значения: none | lemmatize_ru | lemmatize_en | lemmatize_de | lemmatize_ru_all | lemmatize_en_all | lemmatize_de_all | stem_en | stem_ru | stem_enru | stem_cz | stem_ar | soundex | metaphone | rlp_chinese | rlp_chinese_batched
morphology = stem_enru
# Кодировка
charset_type = utf-8
# Вырезка html тегов, по умолчанию 0 - отключено | 1 - включено
html_strip = 1
# Удаление содержимого внутри таких элементов, по умолчанию пустой.
html_remove_elements = style, script, code
}
#############################################################################
## indexer settings
#############################################################################
## Объём памяти для index default 32
# рекомендация для Sphinx от 256 до 1024
#Примерно для 1000 статей — индекс занимает 15 мегабайт
indexer
{
mem_limit = 256M
}
#############################################################################
## searchd settings
#############################################################################
searchd
{
#открытие сокета для коннекта:
listen = /var/run/sphinx.socket
log = /var/log/sphinxsearch/searchd.log
#лог поисковых запросов. Можно отключить. Для поиска потенциальных синонимов для wordforms.txt
query_log = /var/log/sphinxsearch/query.log
read_timeout = 5
client_timeout = 300
max_children = 100
pid_file = /var/run/searchd.pid
#workers = threads. По умолчание используется workers = fork. fork хорош тем, что работает #везде, но он же и наиболее ресурсоёмкий по CPU.
workers = threads
#убирает безобидный, но раздражающий Warning при старте демона.
compat_sphinxql_magics = 0
}
# --eof--
Данный шаблон конфигурации это пример важных и оптимизированных деталей, подстройте его для себя заменив dbprefix_ на нужный_ и не забудьте про ваши коннекты к базе и конечно-же отредактируйте sql запросы под вашу структуру базы данных.
Создайте папку entityprefix, вот этой папке сохраняется вся информация о индексах базы, после запуска командой.
mkdir /var/lib/sphinxsearch/data/entityprefix/
создать файл wordforms.txt для синонимов жаргона.
sudo nano /var/lib/sphinxsearch/data/entityprefix/wordforms.txt
CTRL+O записать файл.CTRL+X выйти.
Дополнительно: Запуск и Использование
Как запустить:
searchd
Как остановить:
searchd --stop
Как проверить, запущен или нет:
ps ax | grep searchd
Как запустить полную пере-индексацию (демон для этого должен быть остановлен):
indexer --all
Где, по умолчанию, должен быть файл sphinx.conf:
/etc/sphinxsearch/
Индексация в автоматическом режиме
Создание правила для крона:
*/60 * * * * /usr/bin/indexer --rotate entityprefixarticlesIndex > /dev/null 2>&1
Статьи будут пере-индексироваться раз в час.Полная индексация в среднем занимает менее двух секунд...
Можно менять как угодно.
P.S> Удобно дать крон через webmin url: /cron/index.cgi?
1. Создать новое задание
2. Выполнять задание от имени пользователя, обычно root
3. (для статей) Команда:
4. Выбрать время, как душе угодно./usr/bin/indexer --rotate entityprefixarticlesIndex > /dev/null 2>&1
Файл конфигурации php
Пример файла конфигурации.php для коннекта.
$config['entity_prefix'] = 'entityprefix';
$config['sphinx_host'] = 'unix:///var/run/sphinx.socket';
Файл для синонимов слов в поиске
Примеры wordforms.txt
Служит для облегчения поиска используя жаргон.unix > linux линукс > linux
Запуск SPHINX при старте системы
1. ВариантПо умолчанию SPHINXSEARCH отключен при загрузке системы.
Для его включения редактируйте файл
Найдите строку START=no и поменяйте её на START=yessudo nano /etc/default/sphinxsearch
2. Вариант для searchd
В консоли:
выбрать 2 пункт.crontab -e
дописать в новой строке:
--config путь/дофайла/sphinx.conf@reboot searchd --config /etc/sphinxsearch/sphinx.conf
Выберите для Вас удобный…
Более подробная документация на оф. сайте.
На этом всё успехов.
Статья "Настройка поиска sphinx (Linux)" содержит 0 комментариев