Как установить и настроить Sphinx в Ubuntu 14.04

Вступление

Sphinx - это поисковая система с открытым исходным кодом, которая позволяет осуществлять полнотекстовый поиск. Наиболее известен тем, что выполняет поиск по большим данным очень эффективно. Индексируемые данные, как правило, могут поступать из самых разных источников: базы данных SQL, текстовые файлы, файлы HTML, почтовые ящики и т. Д.

  • Некоторые ключевые функции Sphinx: *

  • Высокая производительность индексации и поиска

  • Расширенные инструменты индексации и запросов

  • Расширенная обработка результатов

  • Проверенная масштабируемость до миллиардов документов, терабайт данных и тысяч запросов в секунду

  • Простая интеграция с источниками данных SQL и XML, а также с поисковыми интерфейсами SphinxQL, SphinxAPI или SphinxSE

  • Простое масштабирование с распределенными поисками

В этом уроке мы настроим Sphinx с сервером MySQL, используя пример файла SQL, включенного в дистрибутив. Это даст вам основную идею о том, как использовать Sphinx для вашего проекта.

Предпосылки

Прежде чем начать это руководство, вам понадобится:

Шаг 1 - Установка MySQL Server

  • Примечание: * Вам необходимо заполнить этот раздел, только если у вас еще не установлен сервер MySQL.

В этом разделе мы установим сервер MySQL. MySQL позволит нам хранить базу данных с примерами данных, которые мы можем использовать для проверки поисковых возможностей Sphinx.

Обновите список пакетов.

sudo apt-get update

Затем установите сервер MySQL.

sudo apt-get install mysql-server

При появлении запроса введите пароль для пользователя root и еще раз введите тот же пароль для подтверждения.

Шаг 2 - Установка Сфинкса

В этом разделе мы установим Sphinx.

Чтобы установить Sphinx, запустите:

sudo apt-get install sphinxsearch

Теперь вы успешно установили Sphinx на свой сервер. Перед запуском демона Sphinx давайте настроим его.

Шаг 3 - Создание тестовой базы данных

В этом разделе мы настроим базу данных, используя пример файла SQL, поставляемого с пакетом.

Давайте импортируем пример файла SQL в базу данных.

Войдите в оболочку сервера MySQL.

mysql -u root -p

При появлении запроса введите пароль для пользователя root MysQL. Ваше приглашение изменится на + mysql> +.

Создайте базу данных с именем + test.

CREATE DATABASE test;

Импортируйте файл SQL.

SOURCE /etc/sphinxsearch/example.sql;

Затем выйдите из оболочки MySQL.

quit

Теперь у вас должна быть тестовая база данных, заполненная данными.

Шаг 4 - Настройка сфинкса

В этом разделе мы настроим файл конфигурации Sphinx.

Создайте файл + sphinx.conf +.

sudo nano /etc/sphinxsearch/sphinx.conf

Конфигурация Sphinx состоит из 3 основных блоков, которые необходимы для работы. Это * index *, * searchd * и * source *. Каждый из этих блоков описан ниже, и в конце этого шага включается полный набор + sphinx.conf + для вставки в файл.

Блок * source * содержит тип источника, имя пользователя и пароль для сервера MySQL. Первый столбец запроса SQL должен быть уникальным идентификатором. Запрос SQL будет выполняться для каждого индекса и выводить данные в файл индекса Sphinx. Ниже приведены описания каждого поля и самого исходного блока.

  • + sql_host +: имя хоста для хоста MySQL. В нашем примере это * localhost *. Это может быть домен или IP-адрес.

  • + sql_user +: имя пользователя для входа в MySQL. В нашем примере это * root *.

  • + sql_pass +: пароль для пользователя MySQL. В нашем примере это пароль пользователя * root * MySQL

  • + sql_db +: имя базы данных, в которой хранятся данные. В нашем примере это * test *.

  • + sql_query +: это запрос, который выводит данные в индекс.

source src1
{
 type          = mysql

 sql_host      = localhost
 sql_user      = root
 sql_pass      = password
 sql_db        = test
 sql_port      = 3306 # optional, default is 3306

 sql_query     = \
 SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
 FROM documents

 sql_attr_uint     = group_id
 sql_attr_timestamp    = date_added

 sql_query_info        = SELECT * FROM documents WHERE id=$id
}

Компонент * index * содержит источник и путь для хранения данных.

  • + source +: имя исходного блока. В нашем примере это * src1 *.

  • + путь +: этот путь для сохранения индекса.

  • + charset_type +: это кодировка индекса. Вы также устанавливаете это в * utf-8 *.

index test1
{
 source            = src1
 path          = /var/lib/sphinxsearch/data/test1
 docinfo           = extern
 charset_type      = sbcs
}

Компонент * searchd * содержит порт и другие переменные для запуска демона Sphinx.

  • + listen +: это порт, который будет запускать демон sphinx. В нашем примере это 9312.

  • + query_log +: этот путь для сохранения журнала запросов.

  • + pid_file +: путь к файлу PID демона Sphinx.

  • + max_matches +: максимальное количество совпадений, возвращаемых для каждого поискового запроса.

  • + seamless_rotate +: предотвращает сбои searchd при ротации индексов с большими объемами данных для предварительного кэширования.

  • + preopen_indexes +: принудительно ли открывать все индексы при запуске.

  • + unlink_old +: отменять ли связь старых копий индекса при успешной ротации.

searchd
{
 listen            = 9312   # Port to listen on
 log           = /var/log/sphinxsearch/searchd.log
 query_log     = /var/log/sphinxsearch/query.log
 read_timeout      = 5
 max_children      = 30
 pid_file      = /var/run/sphinxsearch/searchd.pid
 max_matches       = 1000
 seamless_rotate       = 1
 preopen_indexes       = 1
 unlink_old        = 1
 binlog_path       = /var/lib/sphinxsearch/data
}

Полная конфигурация для копирования и вставки приведена ниже. Единственная переменная, которую вам нужно изменить ниже, это + sql_pass + в блоке источника, который выделен.

source src1
{
 type          = mysql

 sql_host      = localhost
 sql_user      = root
 sql_pass      =  # change this to your root users MySQL password
 sql_db        = test
 sql_port      = 3306

 sql_query     = \
 SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
 FROM documents

 sql_attr_uint         = group_id
 sql_attr_timestamp    = date_added

 sql_query_info        = SELECT * FROM documents WHERE id=$id
}
index test1
{
 source            = src1
 path              = /var/lib/sphinxsearch/data/test1
 docinfo           = extern
 charset_type      = sbcs
}
searchd
{
 listen            = 9312
 log               = /var/log/sphinxsearch/searchd.log
 query_log         = /var/log/sphinxsearch/query.log
 read_timeout      = 5
 max_children      = 30
 pid_file          = /var/run/sphinxsearch/searchd.pid
 max_matches       = 1000
 seamless_rotate   = 1
 preopen_indexes   = 1
 unlink_old        = 1
 binlog_path       = /var/lib/sphinxsearch/data
}

Шаг 5 - Добавление данных в индекс

В этом разделе мы добавим данные в индекс Сфинкса.

Добавьте данные в индекс, используя конфигурацию, которую мы создали ранее.

sudo indexer --all

Вы должны получить что-то похожее на следующее.

Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'test1'...
WARNING: collect_hits: mem_limit=0 kb too low, increasing to 25600 kb
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.005 sec, 33788 bytes/sec, 700.28 docs/sec
total 3 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg

Чтобы поддерживать индекс в актуальном состоянии, давайте создадим cronjob.

Откройте crontab.

crontab -e

Вас могут спросить, какой текстовый редактор вы хотите использовать. Выберите тот, который вы предпочитаете; В этом уроке мы использовали + nano +.

Скопируйте и вставьте следующее в конец файла, затем сохраните и закройте его.

@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all

Вышеупомянутый cronjob будет запускаться каждый час и добавлять новые данные в индекс, используя файл конфигурации по умолчанию.

Шаг 6 - Запуск Сфинкса

В этом разделе мы запустим демон Sphinx.

По умолчанию демон Sphinx отключен. Чтобы включить Sphinx, сначала откройте + / etc / default / sphinxsearch +.

sudo nano /etc/default/sphinxsearch

Найдите строку + START = no + и установите для нее значение yes.

START=yes

Затем сохраните и закройте файл.

Наконец, запустите демон Сфинкса.

sudo service sphinxsearch start

В этом разделе мы проверим наш поиск. Введите следующую команду.

search this is my test document number

Вы должны получить что-то похожее на следующее.

Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinxsearch/sphinx.conf'...
index 'test1': query 'this is my test document number ': returned 2 matches of 2 total in 0.002 sec

displaying matches:
1. document=1, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
id=1
group_id=1
group_id2=5
date_added=2014-12-16 09:49:04
title=test one
content=this is my test document number one. also checking search within phrases.
2. document=2, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
id=2
group_id=1
group_id2=6
date_added=2014-12-16 09:49:04
title=test two
content=this is my test document number two

words:
1. 'this': 4 documents, 4 hits
2. 'is': 4 documents, 4 hits
3. 'my': 2 documents, 2 hits
4. 'test': 3 documents, 5 hits
5. 'document': 2 documents, 2 hits
6. 'number': 3 documents, 3 hits

Выше вы можете найти 2 совпадения из нашего тестового индекса для нашего поискового запроса. Вы также можете найти совпадения по слову.

Заключение

В этом уроке мы показали вам очень простой поиск с использованием командной строки. Вы также можете найти официальные встроенные реализации SphinxAPI для PHP, Perl, Python, Ruby и Java here.

Если вы используете PHP, here - несколько удобных примеров для тестирования Sphinx.

Используя Sphinx, вы можете легко добавить пользовательский поиск на свой сайт. Для получения дополнительной информации об использовании Sphinx, посетите http://sphinxsearch.com [веб-сайт проекта].