Меню Рубрики

Установка sphinx на сервер

Sphinx. Установка и настройка.

Поисковая машина Sphinx – это полнотекстовая поисковая система, которая бесплатна, быстра и масштабируема. Она предназначена для производительности и актуальности. Не имеет аналогов ни в одной традиционной базе данных.

Установка и настройка Sphinx на Linux

Чтобы установить Sphinx на сервер Ubuntu, введите:

Поисковая система Sphinx успешно установлена на сервер. После установки Sphinx нуждается в дополнительной настройке.

Настройка Sphinx

Конфигурации Sphinx должны храниться в файле sphinx.conf в каталоге /etc/sphinxsearch. Они состоят из трёх основных блоков: index, searchd и source. Описание каждого из них и общий вид конфигурационного файла можно найти ниже.

Для начала создайте конфигурационный файл:

Блок source

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

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

Что еще интересного из настроек:

  • sql_query_range — запрос который должен возвращать минимальное и максимальное значение id индексируемых записей, парамаметр пригодится для ranged query.
  • sql_range_step — количество записей получаемых за одну итерацию в ranged query.

Блок index

Блок index содержит настройки построения индекса с использованием источника.

Описание настроек:

  • docinfo — тип хранения атрибутов индекса. Может принимать значения none, extern и inline. None уместен когда индекс не имеет атрибутов, при выборе inline атрибуты будут храниться в .spd файле вместе с документами, а при extern для них будет создан отдельный .spa файл.
  • dict — тип словаря, crc или keywords. crc лучше использовать когда не нужен поиск по подстрокам. Keywords быстрее работает с подстроками, поддерживает wildcard поиск и размер индекса получается в 3-10 раз меньше.
  • morphology — морфологический препроцессор. Препроцессор применяется к индексируемым словам чтобы заменить различные формы одного слова нормализованной формой. Sphinx имеет три вида морфологических препроцессоров: лемматизатор, стеммер и фонетические алгоритмы. Стоит отметить, что Sphinx имеет поддержку русского языка из коробки. Также имеется поддержка libstemmer.
  • stopwords — путь к файлу со списком стоп-слов (разделенных пробелами). Стоп-слова не учитываются при поиске.stopwords — путь к файлу со списком стоп-слов (разделенных пробелами). Стоп-слова не учитываются при поиске.
  • wordforms — путь к файлу со списком словоформ, например «hypertext preprocessor > php».
  • min_word_len — минимальная длина индексируемого слова.
  • html_strip — параметр определяет нужно ли удалять html теги из входных данных.

Блок indexer

Блок indexer содержит настройки индексатора

Блок searchd

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

Настройки демона обычно всегда стандартные, указываем адрес, порт демона и пути к логам

Описание настроек:

  • listen — адрес и порт, на котором нужно запустить Sphinx, и используемый протокол (в руководстве – 9306:mysql41). Популярные протоколы Sphinx — sphinx (SphinxAPI) и :mysql41 (SphinxQL).
  • log — путь к файлу лога.
  • query_log — путь к файлу лога запросов.
  • read_timeout — тайм-аут чтения в секундах.
  • max_children — максимальное количество форков.
  • seamless_rotate — предотвращает останов searchd при кэшировании большого объема данных.
  • preopen_indexes — указывает, нужно ли предварительно открывать все индексы.
  • pid_file — путь к PID файлу, обязательный параметр.
  • workers — тип мультипроцессорного режима. None для выключения, все запросы будут выполняться синхронно один за одним. Fork и prefork — новый процесс будет форкнут для обработки запроса. И thread — когда для обработки запроса будет создан новый поток. Последний необходим для работы real-time индекса.

Запускаем sphinx

После того как мы создали файл конфигурации sphinx.conf, нам надо проиндексировать данные из нашей БД. Для этого в консоли запускаем индексатор:

В случае успешного индексирования получим примерно вот такие строки:

Запускаем поискового демона:

В случае успешного запуска должны увидеть примерно вот такой вывод:

Коннектимся к демону по SQL протоколу что бы проверить его работоспособность:

Теперь можно использовать консольный mysql клиент. Полное описание протокола SQL, реализованного в SphinxQL читайте по ссылке http://sphinxsearch.com/docs/current.html#sphinxql-reference

Запускаем переиндексацию по крону

Добавляем в системный планировщик заданий (крон, crontab) запуск индексатора через каждые сутки:

Защита служебных портов

После настройки и запуска поискового сервера Sphinx важно помнить что его демн открывает порты 9312, 9306 (указанные в настройках) и делает их доступными на всех интерфейсах. Настоятельно рекомендую закрыть их от внешнего мира при помощи файрвола на внешнем интерфейсе (интернет). Вот два простых правила для IPTABLES:

Где eth0 — имя сетевого интерфейса, который смотрит в интернет.

Скрипт автозапуска searchd для init.d

Теперь нужно сделать так чтобы демон searchd стартовал при загрузке/перезагрузке операционной системы. Ниже приведен пример создания и настройки скрипта для Debian/Ubuntu GNU/Linux без использования systemd.

Откроем для редактирования новый скрипт инициализации в папке «/etc/init.d» и добавим туда следующие строчки:

Установим права на скрипт запуска и зарегистрируем его в автозапуске:

Читайте также:  Установка зажигания двс 417

Для надежности можете перезагрузить свой сервер и проверить запустился ли демон searchd:

источник

Предложение от 8host.com

Установка и настройка Sphinx в Ubuntu 16.04

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

  • Высокопроизводительная индексация и поиск
  • Продвинутые инструменты индексации и запросов
  • Продвинутая постобработка
  • Масштабируемость до миллиардов документов, терабайтов данных и тысяч запросов в секунду
  • Простая интеграция с источниками данных SQL и XML и поисковыми интерфейсами SphinxQL, SphinxAPI или SphinxSE
  • Распределенный поиск

Данное руководство поможет установить Sphinx и настроить поисковую систему для взаимодействия с MySQL.

Требования

  • Настроенный сервер Ubuntu 16.04.
  • Не-root пользователь с доступом к sudo (о создании такого пользователя можно прочитать в этом руководстве).
  • Предустановленный сервер MySQL (инструкции по установке можно найти в соответствующем разделе этого руководства).

1: Установка Sphinx

Чтобы установить Sphinx на сервер Ubuntu, введите:

sudo apt-get install sphinxsearch

Поисковая система Sphinx успешно установлена на сервер. После установки Sphinx нуждается в дополнительной настройке.

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

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

Введите root-пароль MySQL, после чего появится командная строка:

Создайте БД (в данном руководстве она называется test):

Затем закройте оболочку MySQL:

Теперь БД test заполнена данными из импортированного файла.

3: Настройка Sphinx

Конфигурации Sphinx должны храниться в файле sphinx.conf в каталоге /etc/sphinxsearch. Они состоят из трёх основных блоков: index, searchd и source. Описание каждого из них и общий вид конфигурационного файла можно найти ниже.

Для начала создайте конфигурационный файл:

sudo nano /etc/sphinxsearch/sphinx.conf

Примечание: После описания каждого блока настроек можно найти полный код для sphinx.conf.

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

  • type: тип источника данных. В данном случае это mysql (также система поддерживает типы pgsql, mssql, xmlpipe2, odbc и т.д.).
  • sql_host: имя хоста MySQL; в данном случае это localhost. В это поле нужно внести домен или IP-адрес.
  • sql_user: имя пользователя MySQL (в данном случае это root).
  • sql_pass: пароль MySQL.
  • sql_db: имя БД, в которой хранятся нужные данные (в этом руководстве – test).
  • sql_query: запрос, который сбрасывает данные в индексный файл.

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 содержит данные об источнике и путь к местонахождению данных.

  • source: имя блока source. В данном случае это src1.
  • path: путь к индексному файлу.

index test1
<
source = src1
path = /var/lib/sphinxsearch/data/test1
docinfo = extern
>

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

  • listen: порт, на котором нужно запустить Sphinx, и используемый протокол (в руководстве – 9306:mysql41). Популярные протоколы Sphinx — sphinx (SphinxAPI) и :mysql41 (SphinxQL).
  • query_log: путь к логу запросов.
  • pid_file: путь к PID-файлу Sphinx.
  • max_matches: максимальное количество совпадений, которое нужно выводить за один раз.
  • seamless_rotate: предотвращает останов searchd при кэшировании большого объема данных.
  • preopen_indexes: указывает, нужно ли предварительно открывать все индексы.
  • unlink_old: указывает, нужно ли отключить старые копии индекс-файлов.

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
p > seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
binlog_path = /var/lib/sphinxsearch/data
>

Ниже приведены все конфигурации файла sphinx.conf. Вы можете просто скопировать и вставить их в свой файл. Единственная переменная, которую нужно отредактировать – это sql_pass в блоке source; укажите в ней свой пароль mysql.

source src1
<
type = mysql
sql_host = localhost
sql_user = root
sql_pass = your_root_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
>
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
p > seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
binlog_path = /var/lib/sphinxsearch/data
>

Больше конфигураций можно найти в файле /etc/sphinxsearch/sphinx.conf.sample, который содержит подробное описание всех переменных.

4: Управление индексом

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

Для этого используется только что созданный конфигурационный файл.

Sphinx 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:

Читайте также:  Установка личности сотрудником полиции

Команда может предложить вам выбрать текстовый редактор (в руководстве используется nano).

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

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

Теперь поисковая система Sphinx готова к запуску.

5: Запуск Sphinx

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

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

Запустите Sphinx с помощью systemctl:

sudo /etc/init.d/sphinxsearch start

Starting sphinxsearch: Sphinx 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’.
listening on all interfaces, port=9312
precaching index ‘test1’
precached 1 indexes in 0.002 sec
sphinxsearch

Теперь Sphinx будет автоматически запускаться вместе с сервером.

6: Тестирование

Теперь попробуйте найти данные с помощью Sphinx. Подключитесь к SphinxQL с помощью интерфейса MySQL (командная строка изменится на mysql>).

Попробуйте найти предложение:

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

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

Попробуйте выполнить поиск по ключевым словам:

CALL KEYWORDS (‘test one three’, ‘test1’, 1);

В индексе test1 система Sphinx нашла:

  • 5 совпадений в 3 документах для ключа test.
  • 2 совпадения в 1 документе для ключа one.
  • 0 совпадений в 0 документах для ключа three.

Заключение

Данное руководство помогает установить Sphinx и выполнить простой поиск данных с помощью SphinxQL и MySQL.

По этой ссылке можно найти реализации Sphinx API для PHP, Perl, Python, Ruby и Java.

Пользователи Nodejs могут найти пакет SphinxAPI по этой ссылке.

Sphinx позволяет добавить пользовательский поиск на сайт. Более подробную информацию по использованию Sphinx можно найти на сайте проекта.

источник

Установка Sphinx под Linux — строим свой поисковый сервер

Sphinx — поисковый сервер и открытым исходным кодом (Open Source Search Server) для индексации контента из баз данных и осуществления полнотекстового поиска, разработанный Андреем Аксеновым. В статье пошагово рассказано как установить и настроить поисковый сервер Sphinx на сервер под управлением операционной системы Linux (Ubuntu/Dedian). Приведены примеры, советы и ссылки которые будут полезны как администраторам так и разработчикам.

Прежде чем приступить к пошаговому мануалу по установке и настройке поискового сервера Sphinx хочу вам рассказать как я познакомился с данной системой и что послужило толчком к ее использованию.

Вступление

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

Конечно же данная реализация не лишена недостатков, основной недостаток — это не достаточно релевантная поисковая выдача поскольку мой движок не учитывал морфологию слов, а искал только прямые вхождения поисковых фраз с простым анализом распределенности по статье. Писать мощный поисковый модуль со сложной логикой и оптимизациями «на стероидах» у меня не было ни времени ни особого желания.

Поиск от Яндекса и его минусы

Позже я узнал про поиск от Яндекса, который без особого труда можно прикрутить к своему сайту используя Yandex XML Search API. К моему движку был написан модуль для осуществления поиска используя Yandex XML Search API и казалось бы все просто супер но со временем меня начали не устраивать некоторые ограничения и неудобства при работе с Yandex XML Search.

Вот что мне показалось неудобным при использовании Yandex XML Search API:

  • ограничение на количество запросов в сутки, а потом еще сделали график ограничений для разного времени суток. Хотите уменьшить ограничения. отправьте СМС на номер. шутка, можно стать партнером Яндекса, для аккаунта зарегистрироваться в партнерской сети Яндекс Директ (РСЯ), связаться с поддержкой Яндекса и рассказать им зачем вам нужно большое количество запросов к Yandex XML Search API.
  • поиск производится только по контенту, который проиндексирован Яндексом. Если странички нет в индексе Яндекса — ее вы никогда не увидите в поисковой выдаче своего сайта.
  • привязка сайта к стороннему сервису, зависимость поиска от него.

Поисковый движок Sphinx

И тут я вспомнил что читал когда-то на Хабре и еще на каком-то блоге по HighLoad-проектам о мощном бесплатном поисковом движке с расширенным анализом и множеством возможностей по настройке и интеграции. Назывался этот движок Sphinx(сфинкс). Очень удачное название, хорошо запоминается и легко ищется в Google/Yandex.

Основные характеристики и возможности Sphinx:

  • индексирование: до 10-15Мб на каждое ядро микропроцессора;
  • поиск: 150-250 поисковых запросов в секунду на каждое ядро при 1Млн документов в индексе;
  • высокая масштабируемость;
  • распределенный поиск;
  • поддержка до 32 и более полей при полнотекстовом поиске;
  • поддержка дополнительный атрибутов для каждого из индексируемых документов;
  • возможность использовать стоп слова;
  • поддержка однобайтовых (СЗ1251 и т.п) и двухбайтовых кодировок (UTF-8);
  • морфологический поиск с модулями для разных языков;
  • поддержка MySQL и PostgreSQL из коробки;
  • поддержка других ODBC совместимых баз данных;
  • кроссплатформенность;
  • готовые к использованию решения API для языков PHP, Python, Java.
Читайте также:  Установка валов грм змз 409

Сфинкс используется на многих высоконагруженных проектах, к примеру это Хабрахабр, Викимапия и другие. Система себя зарекомендовала с наилучшей стороны, известно что существует поисковый кластер в котором проиндексировано около 3 миллиардов документов и который осуществляет более 50 миллионов поисковых запросов в сутки.

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

Как это работает

На сервер ставится поисковый демон Sphinx, который индексирует через заданный промежуток времени статьи и контент вашего сайта — создает поисковый индекс.

На вашем сайте подключается Sphinx API, который есть для Java, PHP, Ruby (можно написать реализацию и для других языков), пишется поисковый модуль который делает несложные запросы к демону(сервису) Sphinx — searchd.

При запросе поисковой фразы с поисковой формы сайта через Sphinx API делается обращение к демону searchd, который нам возвращает ID записей с нужной сортировкой и фильтрацией. Дальше имея ID публикаций мы делаем один запрос к БД сайта и получаем всю информацию о наших статьях, остается только красиво вывести список найденных элементов.

Установка и настройка Sphinx на Linux

Предполагается что у вас уже установлена ОС Linux, на которой будет работать (или уже работает ) сайт или сервис, на котором нужно будет использовать Sphinx Search API.

Обновляем источники пакетов и ставим нужный софт:

Идем по ссылке http://sphinxsearch.com/downloads/release/ и качаем архив с исходными кодами для последнего стабильного релиза ( Get Source tarball tar.gz ). Потом распаковываем архив и переходим в разархивированную папку. Вот к примеру я качал 2.1.3-release:

Теперь компилируем наш Сфинкс с поддержкой MySQL (есть поддержка и других БД, смотри док.), поскольку весь полезный контент сайта хранится в БД MySQL:

Копируем шаблон файла с настройками и редактируем его содержимое под наши нужды:

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

Приводить полное описание всех настроек я не буду, в шаблонном файле все хорошо документировано, а также в официальной документации (смотри ссылки в конце статьи) все понятно изложено. Чтобы все изначально прояснить приведу здесь текст своего конфигурационного файла с подробными комментариями:

Запускаем индексацию наших данных:

В случае успешного индексирования получим примерно вот такие строки:

Запускаем поискового демона:

В случае успешного запуска должны увидеть примерно вот такой вывод:

Делаем тестовый поисковый запрос, где YOUR_QUERY_STRING — ваша поисковая фраза:

После запуска будет выведена длинная простыня записей что отвечают критериям поиска.

Проверяем работу поиска с использованием PHP API. Внимание: PHP должен быть установлен на сервере! «YOUR_QUERY_STRING» — ваш поисковый запрос

Надеюсь у вас все получилось.

Скрипт автозапуска searchd для init.d

Теперь нужно сделать так чтобы демон searchd стартовал при загрузке/перезагрузке операционной системы. Ниже приведен пример создания и настройки скрипта для Debian/Ubuntu GNU/Linux без использования systemd.

Откроем для редактирования новый скрипт инициализации в папке «/etc/init.d»:

Копируем и вставляем следующий текст (CTRL+C, CTRL+V) в скрипт /etc/init.d/searchd :

Установим права на скрипт запуска и зарегистрируем его в автозапуске:

Для надежности можете перезагрузить свой сервер и проверить запустился ли демон searchd:

Скрипт автозапуска searchd для systemd

В более новых версиях GNU/Linux уже присутствует такой мощный набор управления системой как systemd. Чтобы добавить наш демон searchd в автозапуск системы с использованием systemd нужно проделать несколько несложных операций.

Откроем для редактирования новый файл будущего скрипта для управления запуском searchd:

Копируем в редактор следующий текст скрипта:

Устанавливаем права на запуск скрипта:

Создаем конфигурационный файл для нашее службы (демона):

Копируем в редактор следующее содержимое:

Настройка автоматической переиндексации

Добавляем в системный планировщик заданий (крон, crontab) запуск индексатора через каждые сутки:

Добавляем в конец содержимого файла следующую строчку:

Все готово! Вы установили и настроили поисковый сервер .

Защита служебных портов

После настройки и запуска поискового сервера Sphinx важно помнить что его демн открывает порты 9312, 9306 (указанные в настройках) и делает их доступными на всех интерфейсах. Настоятельно рекомендую закрыть их от внешнего мира при помощи файрвола на внешнем интерфейсе (интернет). Вот два простых правила для IPTABLES:

Где eth0 — имя сетевого интерфейса, который смотрит в интернет.

Пример взаимодействия со Sphinx на PHP

Итак, сервер настроен все проиндексировано, работоспособность проверена. Качаем себе Sphinx API класс для работы в PHP:

Помещаем скрипт sphinxapi.php в свой проект и подключаем этот скрипт при помощи include/require.

Вот простая реализация подключения и выборки при помощи PHP(код для примера):

Заключение

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

источник

Добавить комментарий