Как индексировать большие объемы текста в Sphinx’e
Sphinx — простой в использовании и развертывании, понятный и легкий инструмент для полнотекстового поиска в связке с базой данных MySQL.
Его главное преимущество — высокая скорость работы и сравнительная простота при масштабировании. Так что Sphinx подходит как для маленьких сайтов, так и для огромных площадок, как Craigslist, к примеру, на котором Sphinx обрабатывает более 50 млн. запросов ежедневно.
К тому же, система с легкостью справляется с индексацией больших объемов текста, так как поддерживает кластеризацию и шардинг.
Конфигурация источников данных
Предположим, что база данных разделена на 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 — мощный инструмент для полнотекстового поиска, который при правильной настройке с легкостью справляется с большими объемами данных.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: