Назад к списку постов

Пример конфигурации Sphinx Search

Sphinx Search - это мощный и быстрый полнотекстовый поисковик, который может быть использован для поиска по большим объемам данных. В этой статье мы рассмотрим пример конфигурации для Sphinx Search на примере поиска товаров в интернет-магазине.

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

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

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

Пример конфигурационного файла:


source products
{
    type = mysql

    sql_host = localhost
    sql_user = root
    sql_pass = password
    sql_db   = mydatabase
    sql_port = 3306

    sql_query = \\
        SELECT id, name, description \\
        FROM products

    sql_attr_uint = category_id
}

index products_index
{
    source = products
    path = /var/lib/sphinxsearch/data/products_index
    docinfo = extern

    morphology = stem_enru
    min_word_len = 3
    charset_type = utf-8

    min_infix_len = 2
    enable_star = 1
    expand_keywords = 1

    html_strip = 1
    html_remove_elements = style, script
    html_remove_entities = 1
    html_index_attrs = class, title, alt

    stopwords = /etc/sphinxsearch/stopwords.txt
}

searchd
{
    listen = 9312
    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/searchd.pid
    seamless_rotate = 1
    preopen_indexes = 1
    unlink_old = 1
    workers = threads
    binlog_path = /var/lib/sphinxsearch/data
}

В данном примере мы создаем источник данных products, который будет использовать базу данных MySQL для получения данных. Мы указываем хост, пользователя, пароль, базу данных и порт для подключения к MySQL. В sql_query мы указываем запрос, который будет извлекать необходимые поля из таблицы products. Также мы указываем атрибут category_id, который будет использоваться для фильтрации результатов по категории товаров.

Далее мы создаем индекс products_index, который будет использовать источник данных products. Мы указываем путь, по которому будут храниться данные индекса, а также настройки индексации и поиска. В данном примере мы используем stem_enru для морфологического анализа слов, utf-8 для кодировки, а также указываем минимальную длину слова, минимальную длину внутреннего фрагмента и настройки для поиска с использованием звездочки.

Наконец, мы настраиваем searchd, который будет запускаться как демон и обрабатывать запросы на поиск. Мы указываем порт, на котором будет слушать сервер, путь для логирования, настройки для запуска в нескольких потоках и другие параметры.

Запуск и использование

После настройки Sphinx Search, можно запустить сервер и проиндексировать данные. Для этого можно использовать команды:


sudo searchd
sudo indexer --all --rotate

После этого можно выполнять поиск с использованием клиента Sphinx Search, например, с помощью библиотеки SphinxAPI для PHP:


require_once('sphinxapi.php');

$cl = new SphinxClient();
$cl->SetServer('localhost', 9312);

$result = $cl->Query('product name', 'products_index');

В данном примере мы ищем товары, у которых в названии или описании есть слово 'product name'. Результатом запроса будет массив с найденными товарами.

Заключение

Sphinx Search - это мощный инструмент для поиска по большим объемам данных. В этой статье мы рассмотрели пример конфигурации для поиска товаров в интернет-магазине, но его можно использовать и для других задач. Надеюсь, этот пример поможет вам настроить Sphinx Search для ваших нужд.

#DevOps #Поиск #Sphinx

Назад к списку постов Следующий пост

menuзакрыть

начать проект

Заявка отправлена

Спасибо! Заявка отправлена. Свяжемся с вами в течении часа!