Поисковая машина Sphinx – это полнотекстовая поисковая система, которая бесплатна, быстра и масштабируема. Она предназначена для производительности и актуальности. Не имеет аналогов ни в одной традиционной базе данных.
Чтобы установить Sphinx на сервер Ubuntu, введите: sudo apt-get install sphinxsearch
Поисковая система Sphinx успешно установлена на сервер. После установки Sphinx нуждается в дополнительной настройке.
Конфигурации Sphinx должны храниться в файле sphinx.conf в каталоге /etc/sphinxsearch. Они состоят из трёх основных блоков: index, searchd и source. Описание каждого из них и общий вид конфигурационного файла можно найти ниже.
Для начала создайте конфигурационный файл: sudo nano /etc/sphinxsearch/sphinx.conf
Блок source содержит описание источника данных для нашего индекса, параметров доступа к ним, атрибутов и правил их анализа.. Первый столбец sql_query должен содержать уникальный ID. Запрос SQL будет выполняться для каждого индекса, а затем передавать данные в индексный файл Sphinx. source doc_source { type = mysql # тип источника, в данном случае БД MySQL
# Параметры подключения к БДsql_host = localhost # Хост MySQLsql_user = root # Пользователь MySQLsql_pass = password # Пароль MySQLsql_db = my_test # Название БД в MySQLsql_port = 3306 # Порт сервера MySQL# запрос или запросы, которые будут# выполнены после установки соединения с базой данных # Кодировка индексируемой таблицы sql_query_pre = SET NAMES utf8 COLLATE utf8_unicode_ci # запрос который возвращает данные для индексации запрос которым делаем выборку всех записей, # которые должны быть проиндексированыsql_query = SELECT id, category_id, UNIX_TIMESTAMP(doc_date) AS doc_date, title, content FROM documents WHERE doc_status = "active" # поля, по которым может идти группировка, фильтрация и сортировка(см. http://sphinxsearch.com/docs/current.html#attributes)sql_attr_uint = category_idsql_attr_uint = doc_date
}
Стоит отметить что раздел source конфигурации поддерживает наследование, и это весьма удобно, т.к. можно создать один source с настройками соединения с базой данных, и в остальных наследовать его, чтобы не дублировать одни и те же настройки.
source main {….}
source posts : main {….}
Что еще интересного из настроек:
Блок index содержит настройки построения индекса с использованием источника.
index doc_index{ # Имя источника данных source = doc_source # Путь по которому будут сохранены файлы индекса path = /var/lib/sphinxsearch/data/doc_index #тип хранения атрибутов индекса docinfo = extern }
Описание настроек:
Блок indexer содержит настройки индексатора indexer{mem_limit = 32M # лимит памяти для работы индексатора}
Блок searchd содержит порты и переменные для запуска демона Sphinx. Настройки демона обычно всегда стандартные, указываем адрес, порт демона и пути к логам: searchd{ listen = 127.0.0.1:9312 # порт для работы через API listen = 127.0.0.1:9306:mysql41 # порт для комуникаций с MySQL log = /var/log/sphinx/searchd.log query_log = /var/log/sphinx/query.log read_timeout = 5 max_children = 30 pid_file = /var/log/sphinx/searchd.pid}
Описание настроек:
После того как мы создали файл конфигурации sphinx.conf, нам надо проиндексировать данные из нашей БД. Для этого в консоли запускаем индексатор: /usr/local/sphinx/bin/indexer --all --verbose
В случае успешного индексирования получим примерно вот такие строки: Sphinx 2.2.10-id64-release (2c212e0)Copyright (c) 2001-2015, Andrew AksyonoffCopyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file ‘/path/to/config/sphinx.conf’…indexing index ‘postsIndex’…collected 500 docs, 0.1 MBcollected 1500 attr valuessorted 0.0 Mvalues, 100.0% donesorted 0.0 Mhits, 100.0% donetotal 500 docs, 129885 bytestotal 0.049 sec, 2629570 bytes/sec, 10122.68 docs/secindexing index ‘categoriesIndex’…collected 30 docs, 0.0 MBsorted 0.0 Mhits, 100.0% donetotal 30 docs, 451 bytestotal 0.007 sec, 57554 bytes/sec, 3828.48 docs/sectotal 1509 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avgtotal 26 writes, 0.000 sec, 9.9 kb/call avg, 0.0 msec/call avg Ошибок нет, все работает.
Запускаем поискового демона: searchd --config /path/to/config/sphinx.conf
В случае успешного запуска должны увидеть примерно вот такой вывод: Sphinx 2.1.3-dev (r4319)Copyright (c) 2001-2013, Andrew AksyonoffCopyright (c) 2008-2013, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file ‘/usr/local/sphinx/etc/sphinx.conf’…listening on all interfaces, port=9312listening on all interfaces, port=9306precaching index ‘mysqlbasename’precached 1 indexes in 0.000 sec
Коннектимся к демону по SQL протоколу что бы проверить его работоспособность: mysql -h 127.0.0.1 -P 9306
Теперь можно использовать консольный mysql клиент. Полное описание протокола SQL, реализованного в SphinxQL читайте по ссылке http://sphinxsearch.com/docs/current.html#sphinxql-reference
Добавляем в системный планировщик заданий (крон, crontab) запуск индексатора через каждые сутки:
crontab -e # добавлем в крон следующую строку:0 0 * * * root /usr/local/sphinx/bin/indexer --rotate --all --config /usr/local/sphinx/etc/sphinx.conf
После настройки и запуска поискового сервера Sphinx важно помнить что его демн открывает порты 9312, 9306 (указанные в настройках) и делает их доступными на всех интерфейсах. Настоятельно рекомендую закрыть их от внешнего мира при помощи файрвола на внешнем интерфейсе (интернет). Вот два простых правила для IPTABLES:
iptables -A INPUT -p tcp -i eth0 --dport 9306 -j DROPiptables -A INPUT -p tcp -i eth0 --dport 9312 -j DROP
Где eth0 — имя сетевого интерфейса, который смотрит в интернет.
Теперь нужно сделать так чтобы демон searchd стартовал при загрузке/перезагрузке операционной системы. Ниже приведен пример создания и настройки скрипта для Debian/Ubuntu GNU/Linux без использования systemd.
Откроем для редактирования новый скрипт инициализации в папке «/etc/init.d» и добавим туда следующие строчки: #!/bin/bash
case «${1:-»}» in
‘start’)/usr/local/sphinx/bin/searchd;;
‘stop’)/usr/local/sphinx/bin/searchd —stop;;
‘restart’)/usr/local/sphinx/bin/searchd —stopsleep 1/usr/local/sphinx/bin/searchd;;
*)echo «Usage: $SELF start|stop|restart»exit 1;;
esac Установим права на скрипт запуска и зарегистрируем его в автозапуске: chmod +x /etc/init.d/searchdupdate-rc.d searchd defaults
Для надежности можете перезагрузить свой сервер и проверить запустился ли демон searchd: rebootps ax | grep searchd
Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…
В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…
Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…
Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…
Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…
В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…