Как индексировать большие объемы текста в Sphinx'e

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

Его главное преимущество — высокая скорость работы и сравнительная простота при масштабировании. Так что Sphinx подходит как для маленьких сайтов, так и для огромных площадок, как Craigslist, к примеру, на котором Sphinx обрабатывает более 50 млн. запросов ежедневно. Sphinx indexes

К тому же, система с легкостью справляется с индексацией больших объемов текста, так как поддерживает кластеризацию и шардинг.

Конфигурация источников данных

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

Для начала нужно подключиться к базе данных:

source shop_product
{
	type			= mysql

	sql_host		= localhost
	sql_user		= sphinx
	sql_pass		= password
	sql_db		= shop
	sql_sock  = /var/run/mysqld/mysqld.sock
}

# Подключение к БД, задание пользователя, пароля и сокета MySQL

Затем необходимо подключить дочерние источники:

 source shop_smartphone : shop_product
{
    sql_query_pre = SET NAMES utf8
    sql_query_pre = SET SESSION query_cache_type=OFF
    sql_query = SELECT id, title, description FROM smartphone
}

source shop_tablet : shop_product
{
    sql_query_pre = SET NAMES utf8
    sql_query_pre = SET SESSION query_cache_type=OFF
    sql_query = SELECT id, title, description FROM tablet
}

source shop_phone : shop_product
{
    sql_query_pre = SET NAMES utf8
    sql_query_pre = SET SESSION query_cache_type=OFF
    sql_query = SELECT id, title, description FROM phone
}

# Подключение дочерних таблиц БД

Настройка индексации

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

index shop_smartphone_index
{
    source        = shop_smartphone
    path          = /var/data/shop_smartphone
    charset_type  = utf-8
}

index shop_tablet_index
{
    source        = shop_tablet
    path          = /var/data/shop_tablet
    charset_type  = utf-8
}

index shop_phone_index
{
    source        = shop_phone
    path          = /var/data/shop_phone
    charset_type  = utf-8
}

# Описание индексов и путей хранения

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

*/30 * * * * root [ -x /usr/bin/indexer ] && /usr/bin/indexer --quiet --rotate --all

# Запуск переиндексации каждые 30 минут

Самое главное

Sphinx — мощный инструмент для полнотекстового поиска, который при правильной настройке с легкостью справляется с большими объемами данных.


Подпишитесь на Хайлоад с помощью Google аккаунта
или закройте эту хрень