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

Вступление

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

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

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

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

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

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

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

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

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

Предпосылки

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

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

Установить Sphinx в Ubuntu легко, потому что он находится в собственном репозитории пакетов. Установите его используя + apt-get.

sudo apt-get install sphinxsearch

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

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

Далее мы настроим базу данных, используя примеры данных в файле SQL, поставляемом с пакетом. Это позволит нам проверить, что поиск Sphinx работает позже.

Давайте импортируем образец файла SQL в базу данных. Сначала войдите в оболочку сервера MySQL.

mysql -u root -p

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

Создать фиктивную базу данных. Здесь мы называем это «тест», но вы можете назвать его как хотите.

CREATE DATABASE ;

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

SOURCE /etc/sphinxsearch/example.sql;

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

quit

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

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

Конфигурация Sphinx должна быть в файле с именем + sphinx.conf в` + / etc / sphinxsearch`. Конфигурация состоит из 3 основных блоков, которые необходимы для запуска: * index *, * searchd * и * source *. Мы предоставим вам пример файла конфигурации и объясним каждый раздел, чтобы вы могли настроить его позже.

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

sudo nano /etc/sphinxsearch/sphinx.conf

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

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

  • + type +: тип источника данных для индексации. В нашем примере это * mysql *. Другие поддерживаемые типы включают pgsql, mssql, xmlpipe2, odbc и другие.

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

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

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

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

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

Это исходный блок:

исходный блок для sphinx.conf

source src1
{
 type          = mysql

 #SQL settings (for ‘mysql’ and ‘pgsql’ types)

 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
}

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

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

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

индексный блок для sphinx.conf

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

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

  • + listen +: порт, на котором будет работать демон Sphinx, за которым следует протокол. В нашем примере это * 9306: mysql41 *. Известные протоколы: : sphinx (SphinxAPI) и : mysql41 (SphinxQL)

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

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

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

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

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

Блок поиска для sphinx.conf

searchd
{
 listen            = 9312:sphinx       #SphinxAPI port
 listen            = 9306:mysql41      #SphinxQL port
 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
 seamless_rotate   = 1
 preopen_indexes   = 1
 unlink_old        = 1
 binlog_path       = /var/lib/sphinxsearch/data
}

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

Полный файл sphinx.conf

source src1
{
 type          = mysql

 sql_host      = localhost
 sql_user      = root
 sql_pass      =
 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
}
index test1
{
 source            = src1
 path              = /var/lib/sphinxsearch/data/test1
 docinfo           = extern
}
searchd
{
 listen            = 9306:mysql41
 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
 seamless_rotate   = 1
 preopen_indexes   = 1
 unlink_old        = 1
 binlog_path       = /var/lib/sphinxsearch/data
}

Чтобы изучить дополнительные конфигурации, вы можете взглянуть на файл + / etc / sphinxsearch / sphinx.conf.sample +, в котором все переменные описаны более подробно.

Шаг 4 - Управление индексом

На этом шаге мы добавим данные в индекс Sphinx и обеспечим актуальность индекса с помощью + cron +.

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

sudo indexer --all

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

OutputSphinx 2.2.9-id64-release (rel22-r5006)
Copyright (c) 2001-2015, Andrew Aksyonoff
Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.010 sec, 18552 bytes/sec, 384.50 docs/sec
total 4 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 12 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg

В производственных средах необходимо поддерживать индекс в актуальном состоянии. Для этого давайте создадим cronjob. Сначала откройте crontab.

crontab -e

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

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

кронтаб

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

Теперь, когда Sphinx полностью настроен и настроен, мы можем запустить сервис и попробовать его.

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

По умолчанию демон Sphinx отключен. Во-первых, мы включим его, изменив строку + START = no + на + START = yes + в + / etc / default / sphinxsearch +.

sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch

Затем используйте + systemctl + для перезапуска демона Sphinx.

sudo systemctl restart sphinxsearch.service

Чтобы проверить, работает ли демон Sphinx правильно, запустите.

sudo systemctl status sphinxsearch.service

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

Output● sphinxsearch.service - LSB: Fast standalone full-text SQL search engine
  Loaded: loaded (/etc/init.d/sphinxsearch; bad; vendor preset: enabled)
  Active: active (running) since Tue 2016-07-26 01:50:00 EDT; 15s ago
  . . .

Это также обеспечит запуск демона Sphinx даже при перезагрузке сервера.

Шаг 6 - Тестирование

Теперь, когда все настроено, давайте проверим функциональность поиска. Подключитесь к SphinxQL (через порт 9306), используя интерфейс MySQL. Ваше приглашение изменится на + mysql> +.

mysql -h0 -P9306

Давайте искать предложение.

SELECT * FROM test1 WHERE MATCH('test document'); SHOW META;

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

Output+------+----------+------------+
| id   | group_id | date_added |
+------+----------+------------+
|    1 |        1 | 1465979047 |
|    2 |        1 | 1465979047 |
+------+----------+------------+
2 rows in set (0.00 sec)

+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| total         | 2        |
| total_found   | 2        |
| time          | 0.000    |
| keyword[0]    | test     |
| docs[0]       | 3        |
| hits[0]       | 5        |
| keyword[1]    | document |
| docs[1]       | 2        |
| hits[1]       | 2        |
+---------------+----------+
9 rows in set (0.00 sec)

В приведенном выше результате вы можете видеть, что Sphinx нашел 2 совпадения из нашего индекса + test1 + для нашего тестового предложения. Команда + SHOW META; + также показывает попадания по ключевому слову в предложении.

Давайте искать некоторые ключевые слова.

CALL KEYWORDS ('test one three', 'test1', 1);

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

Output+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1    | test      | test       | 3    | 5    |
| 2    | one       | one        | 1    | 2    |
| 3    | three     | three      | 0    | 0    |
+------+-----------+------------+------+------+
3 rows in set (0.00 sec)

В приведенном выше результате вы можете видеть, что в индексе * test1 * Sphinx обнаружил:

  • 5 совпадений в 3 документах по ключевому слову "тест"

  • 2 совпадения в 1 документе по ключевому слову «один»

  • 0 совпадений в 0 документах по ключевому слову "три"

Теперь вы можете покинуть оболочку MySQL.

quit

Заключение

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

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

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

Related