Manticore Search — это высокопроизводительная мультихранилищная база данных, созданная специально для поиска и аналитики, предлагающая молниеносный полнотекстовый поиск, индексирование в реальном времени и расширенные функции, такие как векторный поиск и колоночное хранение для эффективного анализа данных. Разработанная для работы с малыми и большими наборами данных, она обеспечивает бесшовную масштабируемость и мощную аналитику для современных приложений.
Будучи открытой базой данных (доступной на GitHub), Manticore Search была создана в 2017 году как продолжение движка Sphinx Search. Наша команда разработчиков взяла все лучшие функции Sphinx и значительно улучшила его функциональность, исправив сотни ошибок на этом пути (подробности в нашем журнале изменений). Manticore Search — это современная, быстрая и легковесная база данных с исключительными возможностями полнотекстового поиска, построенная на практически полном переписывании своего предшественника.
- Автозаполнение запросов
- Нечеткий поиск
- Более 20 операторов полнотекстового поиска и более 20 факторов ранжирования
- Пользовательское ранжирование
- Стемминг
- Лемматизация
- Стоп-слова
- Синонимы
- Формы слов
- Продвинутая токенизация на уровне символов и слов
- Корректная сегментация китайского языка
- Подсветка текста
Manticore Search поддерживает возможность добавления эмбеддингов, созданных вашими моделями машинного обучения, к каждому документу, а затем выполнения поиска ближайших соседей по ним. Это позволяет создавать функции, такие как поиск по сходству, рекомендации, семантический поиск и ранжирование по релевантности на основе алгоритмов NLP, а также поиск по изображениям, видео и звукам.
Manticore Search поддерживает запросы JOIN через SQL и JSON, позволяя комбинировать данные из нескольких таблиц.
Manticore Search использует умное параллелирование запросов для уменьшения времени отклика и полного использования всех ядер процессора при необходимости.
Оптимизатор запросов на основе стоимости использует статистические данные о индексированных данных для оценки относительных затрат различных планов выполнения для данного запроса. Это позволяет оптимизатору определить самый эффективный план получения нужных результатов, учитывая такие факторы, как размер индексированных данных, сложность запроса и доступные ресурсы.
Manticore предлагает как построчное, так и колоночное хранение для работы с наборами данных различных размеров. Традиционный и по умолчанию используемый построчный вариант доступен для наборов данных всех размеров — малых, средних и больших, тогда как колоночное хранение предоставляется через Manticore Columnar Library для еще больших наборов данных. Главное отличие этих вариантов хранения в том, что построчное хранение требует, чтобы все атрибуты (исключая полнотекстовые поля) хранились в ОЗУ для оптимальной производительности, тогда как колоночное хранение этого не требует, обеспечивая меньшее потребление памяти, но с возможным слегка более медленным выполнением (как демонстрируют статистические данные на https://db-benchmarks.com/).
Manticore Columnar Library использует индекс Piecewise Geometric Model index, который использует обучаемое отображение между индексируемыми ключами и их расположением в памяти. Компактность этого отображения, в сочетании с особым рекурсивным алгоритмом построения, делает PGM-индекс структурой данных, которая превосходит традиционные индексы по объему памяти на порядки, при этом обеспечивая лучшее время выполнения запросов и обновлений. Вторичные индексы включены по умолчанию для всех числовых и строковых полей, и их можно включить для json-атрибутов.
Нативный синтаксис Manticore — SQL, он поддерживает SQL через HTTP и протокол MySQL, что позволяет подключаться через популярные клиенты mysql на любом языке программирования.
Для более программируемого подхода к управлению данными и схемами Manticore предоставляет протокол HTTP JSON, аналогичный Elasticsearch.
Вы можете выполнять совместимые с Elasticsearch insert и replace JSON-запросы, что позволяет использовать Manticore с такими инструментами, как Logstash (версии < 7.13), Filebeat и другими из семейства Beats.
Легко создавать, обновлять и удалять таблицы онлайн или через конфигурационный файл.
Демон Manticore Search разработан на C++, что обеспечивает быстрое время запуска и эффективное использование памяти. Низкоуровневые оптимизации дополнительно повышают производительность. Другой важный компонент, называемый Manticore Buddy, написан на PHP и используется для высокоуровневой функциональности, не требующей молниеносного времени отклика или чрезвычайно высокой вычислительной мощности. Хотя внесение вклада в код C++ может быть сложной задачей, добавление новой SQL/JSON команды с помощью Manticore Buddy должно быть простым процессом.
Новые или обновленные документы могут быть прочитаны немедленно.
Мы предлагаем бесплатные интерактивные курсы, чтобы сделать обучение легким.
Хотя Manticore не полностью соответствует ACID, он поддерживает изолированные транзакции для атомарных изменений и бинарное логирование для безопасной записи.
Данные могут быть распределены по серверам и центрам обработки данных, причем любой узел Manticore Search может выступать как балансировщиком нагрузки, так и узлом данных. Manticore реализует практически синхронную мультимастерную репликацию с использованием библиотеки Galera, обеспечивая согласованность данных на всех узлах, предотвращая потерю данных и предоставляя исключительную производительность репликации.
Manticore оснащен внешним инструментом manticore-backup и SQL-командой BACKUP для упрощения процесса резервного копирования и восстановления ваших данных. В качестве альтернативы вы можете использовать mysqldump для создания логических резервных копий.
Инструмент indexer и всеобъемлющий синтаксис конфигурации Manticore позволяют легко синхронизировать данные из таких источников, как MySQL, PostgreSQL, совместимые с ODBC базы данных, XML и CSV.
Вы можете интегрировать Manticore Search с сервером MySQL/MariaDB, используя движок FEDERATED или через ProxySQL.
Вы можете использовать Apache Superset и Grafana для визуализации данных, хранящихся в Manticore. Различные инструменты MySQL могут быть использованы для интерактивной разработки запросов Manticore, такие как HeidiSQL и DBForge.
Вы также можете использовать Manticore Search с Kibana.
Manticore предлагает специальный тип таблицы — таблицу типа "percolate", которая позволяет искать запросы вместо данных, что делает ее эффективным инструментом для фильтрации потоков полнотекстовых данных. Просто сохраните ваши запросы в таблице, обрабатывайте поток данных, отправляя каждую партию документов в Manticore Search, и получайте только те результаты, которые соответствуют вашим сохраненным запросам.
Manticore Search универсален и может применяться в различных сценариях, включая:
-
Полнотекстовый поиск:
- Идеален для платформ электронной коммерции, обеспечивая быстрый и точный поиск товаров с такими функциями, как автодополнение и нечеткий поиск.
- Идеально подходит для сайтов с большим объемом контента, позволяя пользователям быстро находить соответствующие статьи или документы.
-
Аналитика данных:
- Загружайте данные в Manticore Search с помощью Beats/Logstash, Vector.dev, Fluentbit.
- Эффективно анализируйте большие наборы данных, используя колоночное хранение Manticore и возможности OLAP.
- Выполняйте сложные запросы к терабайтам данных с минимальной задержкой.
- Визуализируйте данные с помощью Kibana, Grafana или Apache Superset.
-
Фасетный поиск:
- Позволяйте пользователям фильтровать результаты поиска по категориям, таким как цена, бренд или дата, для более точного поиска.
-
Геопространственный поиск:
- Реализуйте поиск на основе местоположения, например, поиск ближайших ресторанов или магазинов, с помощью геопространственных возможностей Manticore.
-
Исправление орфографии:
- Автоматически исправляйте опечатки пользователей в поисковых запросах для повышения точности поиска и удобства пользователей.
-
Автодополнение:
- Предоставляйте предложения в реальном времени по мере ввода пользователем, повышая удобство и скорость поиска.
-
Фильтрация потоков данных:
- Используйте таблицы типа percolate для эффективной фильтрации и обработки потоков данных в реальном времени, таких как ленты социальных сетей или данные журналов.
- Архитектура: arm64 или x86_64
- ОС: на основе Debian (например, Debian, Ubuntu, Mint), на основе RHEL (например, RHEL, CentOS, Alma, Oracle Linux, Amazon Linux), Windows или MacOS.
- Manticore Columnar Library, которая обеспечивает колоночное хранение и вторичные индексы, требует процессор с SSE >= 4.2.
- Нет особых требований к дисковому пространству или оперативной памяти. Пустой экземпляр Manticore Search использует только около 40 МБ RSS RAM.
Руководство организовано так, чтобы отразить наиболее вероятный способ использования Manticore:
- начиная с основной информации о нем и о том, как установить и подключиться
- основные вещи, такие как добавление документов и запуск поисков
- советы по оптимизации производительности, хитрости и расширение Manticore с помощью плагинов и пользовательских функций
Ключевые разделы руководства отмечены 1️⃣, 2️⃣, 3️⃣ и т.д. в меню для вашего удобства, поскольку соответствующий функционал используется чаще всего. Если вы новичок в Manticore, мы настоятельно рекомендуем их не пропускать.
Если вы хотите быстро понять, как в целом работает Manticore, ⚡ Руководство по быстрому старту — хорошее место для начала.
Каждый пример запроса имеет небольшой значок 📋 в правом верхнем углу:

Вы можете использовать его для копирования примеров в буфер обмена. Если запрос является HTTP-запросом, он будет скопирован как команда CURL. Вы можете настроить хост/порт, нажав ⚙️.
Мы любим поиск и сделали всё возможное, чтобы сделать поиск в этом руководстве максимально удобным. Конечно, он работает на базе Manticore Search. Помимо использования строки поиска, которая требует предварительного открытия руководства, есть очень простой способ найти что-то — просто открыв mnt.cr/your-search-keyword:

Есть несколько вещей, которые вам нужно понять о Manticore Search, чтобы следовать лучшим практикам его использования.
- Таблица реального времени позволяет добавлять, обновлять и удалять документы с немедленным применением изменений.
- Простая таблица — это, в основном, неизменяемая структура данных и базовый элемент, используемый таблицами реального времени. Простая таблица хранит набор документов, их общий словарь и настройки индексации. Одна таблица реального времени может состоять из нескольких простых таблиц (чанков), но помимо этого Manticore предоставляет прямой доступ к построению простых таблиц с помощью инструмента indexer. Это имеет смысл, когда ваши данные в основном неизменяемы, и поэтому вам не нужна таблица реального времени.
Manticore Search работает в двух режимах:
- Режим реального времени (RT режим). Это режим по умолчанию, который позволяет управлять вашей схемой данных императивно:
- позволяет управлять схемой данных онлайн с помощью SQL-команд
CREATE/ALTER/DROP TABLEи их аналогов в клиентах без SQL - в конфигурационном файле необходимо определить только настройки, связанные с сервером, включая data_dir
- позволяет управлять схемой данных онлайн с помощью SQL-команд
- Простой режим позволяет определять схемы данных в конфигурационном файле, то есть обеспечивает декларативное управление схемами. Это актуально в трёх случаях:
- когда вы работаете только с простыми таблицами
- или когда ваша схема данных очень стабильна и вам не нужна репликация (которая доступна только в RT режиме)
- когда вам нужно сделать схему данных портируемой (например, для упрощения развертывания на новом сервере)
Вы не можете комбинировать два режима и должны выбрать один, указав data_dir в вашем конфигурационном файле (что является поведением по умолчанию). Если вы не уверены, мы рекомендуем использовать RT режим, так как даже если вам нужна простая таблица, вы можете построить её с помощью отдельной конфигурации простой таблицы и импортировать в ваш основной экземпляр Manticore.
Таблицы реального времени можно использовать как в RT, так и в простом режиме. В RT режиме таблица реального времени определяется командой CREATE TABLE, а в простом режиме она определяется в конфигурационном файле. Простые (офлайн) таблицы поддерживаются только в простом режиме. Простые таблицы не могут создаваться в RT режиме, но существующие простые таблицы, созданные в простом режиме, могут быть конвертированы в таблицы реального времени и импортированы в RT режиме.
Manticore предоставляет несколько способов и интерфейсов для управления схемами и данными, но два основных из них:
- SQL. Это родной язык Manticore, который обеспечивает весь функционал Manticore. Лучшей практикой является использование SQL для:
- управления схемами и выполнения других DBA-операций, так как это самый простой способ сделать это
- проектирования запросов, так как SQL гораздо ближе к естественному языку, чем JSON DSL, что важно при разработке чего-то нового. Вы можете использовать Manticore SQL через любой MySQL клиент или /sql.
- JSON. Большая часть функционала также доступна через JSON предметно-ориентированный язык. Это особенно полезно при интеграции Manticore с вашим приложением, так как с JSON это можно делать более программно, чем с SQL. Лучшей практикой является сначала изучить, как сделать что-то через SQL, а затем использовать JSON для интеграции этого в ваше приложение.
- RHEL, Centos, Alma, Amazon, Oracle
- Debian, Ubuntu, Mint
- MacOS
- Windows
- Docker
- Kubernetes
sudo yum install https://repo.manticoresearch.com/manticore-repo.noarch.rpm
sudo yum install manticoreЕсли вы обновляетесь с более старой версии, рекомендуется сначала удалить старые пакеты, чтобы избежать конфликтов, вызванных обновленной структурой пакетов:
sudo yum --setopt=tsflags=noscripts remove manticore*Это не удалит ваши данные. Если вы внесли изменения в файл конфигурации, он будет сохранен как /etc/manticoresearch/manticore.conf.rpmsave.
Если вы ищете отдельные пакеты, вы можете найти их здесь.
Для получения подробной информации об установке смотрите ниже.
wget https://repo.manticoresearch.com/manticore-repo.noarch.deb
sudo dpkg -i manticore-repo.noarch.deb
sudo apt update
sudo apt install manticoreЕсли вы обновляетесь до Manticore 6 с более старой версии, рекомендуется сначала удалить старые пакеты, чтобы избежать конфликтов, вызванных обновленной структурой пакетов:
sudo apt remove manticore*Это не удалит ваши данные или файл конфигурации.
Если вы ищете отдельные пакеты, вы можете найти их здесь.
Для получения подробной информации об установке смотрите ниже.
brew install manticoresoftware/tap/manticoresearch manticoresoftware/tap/manticore-extraПодробную информацию об установке смотрите ниже.
- Загрузите Установщик Manticore Search и запустите его. Следуйте инструкциям по установке.
- Выберите каталог для установки.
- Выберите компоненты, которые хотите установить. Мы рекомендуем установить все.
- Manticore поставляется с предварительно настроенным файлом
manticore.confв RT режиме. Дополнительная настройка не требуется.
Для получения подробной информации об установке смотрите ниже.
Однострочная команда для песочницы (не рекомендуется для использования в продакшене):
docker run --name manticore --rm -d manticoresearch/manticore && echo "Waiting for Manticore docker to start. Consider mapping the data_dir to make it start faster next time" && until docker logs manticore 2>&1 | grep -q "accepting connections"; do sleep 1; echo -n .; done && echo && docker exec -it manticore mysql && docker stop manticoreЭта команда запускает контейнер Manticore и ожидает его запуска. После запуска она открывает сессию MySQL клиента. Когда вы выходите из MySQL клиента, контейнер Manticore останавливается и удаляется, не оставляя данных. Подробности по использованию Manticore в рабочем продакшен-среде смотрите в следующем разделе.
Для использования в продакшене:
docker run --name manticore -v $(pwd)/data:/var/lib/manticore -p 127.0.0.1:9306:9306 -p 127.0.0.1:9308:9308 -d manticoresearch/manticoreЭта настройка активирует Manticore Columnar Library и Manticore Buddy, а также запустит Manticore на портах 9306 для MySQL соединений и 9308 для всех остальных, используя ./data/ в качестве директории для данных.
Подробнее о работе в продакшене читайте в документации.
helm repo add manticoresearch https://helm.manticoresearch.com
# Update values.yaml if needed
helm install manticore -n manticore --create-namespace manticoresearch/manticoresearchБольше информации об установке Helm чарта вы можете найти в документации.
Docker-образы Manticore Search доступны публично на Docker Hub, собраны из репозитория Manticore Search docker на GitHub.
Чтобы получить образ Manticore, выполните следующую команду:
docker pull manticoresearch/manticore
Для получения дополнительной информации об использовании Manticore в Docker смотрите раздел Использование Manticore в Docker.