Это распространенный вопрос и заблуждение, что как Sphinx, так и Manticore требуют базу данных MySQL. Это не так, и в этой статье мы поговорим о том, как поисковая система может использоваться независимо от MySQL.
Хотя большинство пользователей используют базу данных MySQL (или ее варианты, такие как MariaDB/Percona Server), и Sphinx был нацелен на пользователей MySQL - так как был реализован плагин для базы данных (SphinxSE), а также один из протоколов запросов основан на mysql, программное обеспечение не является специализированным решением для MySQL, а представляет собой универсальный инструмент поиска.
Для компиляции Sphinx и Manticore нет требований (или никогда не было) к какой-либо библиотеке MySQL. Библиотека mysql lib клиента требуется только для mysql-драйвера индексатора. Однако даже без этого вы все равно можете индексировать данные из базы данных MySQL, используя ODBC-драйвер. Протокол MySQL для SphinxQL реализован нативно и не требует заголовков или библиотек MySQL.
Индексация
Manticore реализует несколько драйверов, которые могут получать данные из базы данных. Специфические драйверы баз данных доступны для MySQL, MSSQL и PostgreSQL, а также доступна поддержка ODBC. Драйверы MySQL и PostgreSQL требуют соответствующих клиентских библиотек. Драйвер MSSQL требует клиентской библиотеки ODBC. Однако Manticore может быть собран без поддержки некоторых из этих драйверов или вообще без поддержки каких-либо из них.
Кроме драйверов баз данных, доступны еще более общие драйверы источников данных через XML pipe и драйверы CSV/TSV. С их помощью данные могут быть получены из нереляционного хранилища, такого как NoSQL, или просто из обычного файлового хранилища. Драйвер XML требует XML-файл(ы) в определенном формате. В случае CSV/TSV единственное требование заключается в том, чтобы первый столбец был идентификатором документа. В случае этих драйверов Manticore не требует полного пути к файлу, а выполняет файл и ожидает, что ответ будет в формате XML/CSV/TSV. Это можно использовать для обработки нескольких файлов или целых папок, содержащих файлы.
Поиск
Первой реализацией API был SphinxAPI, пользовательский бинарный протокол, для которого клиентские библиотеки были официально разработаны на нескольких языках программирования, и третьи стороны также портировали клиентские библиотеки на другие языки. Хотя у него нет всех функций, протокол SphinxAPI предлагает полную реализацию для поиска. Проблема с протоколом SphinxAPI (который также используется внутренне распределенными индексами) заключается в поддержании клиентских библиотек в актуальном состоянии. Протокол SphinxQL стал более популярным, так как большинству пользователей было удобно использовать клиент/коннектор mysql и не требовалось никакого обслуживания между обновлениями демона - в отличие от SphinxAPI, который требовал поддержания актуальности, особенно для доступа к новым реализованным функциям. Клиент SphinxAPI был официально реализован на нескольких популярных языках, таких как PHP, Python, Java и Ruby, но существуют порты от третьих сторон для других языков.
Начиная с Sphinx 2.3, был добавлен HTTP-протокол, но он работал только как прокси для поиска в формате sql или SphinxAPI. Это было улучшено в Manticore с новыми конечными точками, которые используют JSON как для полезной нагрузки запросов, так и для ответов. Поскольку это работает как обычный веб-сервис, ответы могут быть проксированы или кэшированы с помощью сервера обратного прокси (например, nginx). В настоящее время JSON API предлагает пути для поиска, манипуляции данными и перколяции с большим количеством команд, которые будут реализованы в будущем.