Поисковая машина 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
Если говорить о том, какие лучшие дистрибутивы Linux мы знаем, то этот список может быть…
Хотя Ubuntu и поставляется со встроенным обозревателем Firefox многие пользователи считают что это не самая…
Что такое Remmina? Remmina — это совершенно бесплатный и свободный клиент так называемого удаленного рабочего…
Как мы знаем, Ubuntu это самая популярная сборка из систем на базе ядра Linux. У…
Выбор ноутбука для каждого пользователя это довольно кропотливый процесс. Люди стараются подобрать ноутбук который будет…
Если вы решили ознакомиться с операционной системой Linux более детально и задались вопросом как установить…