Ответ
Sphinx — это высокопроизводительный, полнотекстовый поисковый движок с открытым исходным кодом, предназначенный для быстрого поиска по большим объемам текстовых данных. Он работает как отдельный демон (searchd) и часто используется как альтернатива встроенному полнотекстовому поиску в СУБД (например, в MySQL) для высоконагруженных проектов.
Ключевые особенности и преимущества:
- Высокая скорость: Оптимизирован для быстрого индексирования и выполнения поисковых запросов, значительно превосходит
LIKEилиMATCH ... AGAINSTв MySQL на больших данных. - Гибкость индексирования: Может индексировать данные из различных источников (MySQL, PostgreSQL, XML-пайпы) с поддержкой морфологии (стемминг, обработка стоп-слов, синонимы).
- Масштабируемость: Поддерживает распределенное индексирование и поиск по нескольким индексам.
- API для языков: Имеет клиентские API для PHP, Python, Java и других.
Базовый пример конфигурации (sphinx.conf):
source src_articles {
type = mysql
sql_host = localhost
sql_user = app_user
sql_pass = password
sql_db = my_database
sql_query = SELECT id, title, content, UNIX_TIMESTAMP(created_at) AS created_ts FROM articles
}
index idx_articles {
source = src_articles
path = /var/lib/sphinxsearch/data/idx_articles
charset_type = utf-8
min_word_len = 2
}
searchd {
listen = 9312
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
}
Использование из PHP (через SphinxAPI):
require_once('sphinxapi.php');
$cl = new SphinxClient();
$cl->SetServer("localhost", 9312);
$cl->SetMatchMode(SPH_MATCH_EXTENDED2);
$cl->SetLimits(0, 20);
// Выполнение поискового запроса
$result = $cl->Query("быстрый поиск", "idx_articles");
if ($result !== false) {
if (!empty($result["matches"])) {
foreach ($result["matches"] as $docId => $docInfo) {
echo "Найден документ ID: $docIdn";
}
} else {
echo "Ничего не найдено.n";
}
} else {
echo "Ошибка запроса: " . $cl->GetLastError();
}
Sphinx отлично подходит для задач, где требуется низкая задержка поиска: каталоги товаров, поиск по новостям, документам или логам.