# Введение

Manticore Search — это высокопроизводительная мультихранилищная база данных, созданная специально для поиска и аналитики, предлагающая молниеносный полнотекстовый поиск, индексирование в реальном времени и расширенные функции, такие как векторный поиск и колоночное хранение для эффективного анализа данных. Разработанная для работы с малыми и большими наборами данных, она обеспечивает бесшовную масштабируемость и мощную аналитику для современных приложений.

Будучи открытой базой данных (доступной на [GitHub](https://github.com/manticoresoftware/manticoresearch/)), Manticore Search была создана в 2017 году как продолжение движка [Sphinx Search](https://sphinxsearch.com/). Наша команда разработчиков взяла все лучшие функции Sphinx и значительно улучшила его функциональность, исправив сотни ошибок на этом пути (подробности в нашем [журнале изменений](https://manual.manticoresearch.com/Changelog)). Manticore Search — это современная, быстрая и легковесная база данных с исключительными возможностями полнотекстового поиска, построенная на практически полном переписывании своего предшественника.

## Ключевые особенности Manticore:
#### Мощный и быстрый полнотекстовый поиск, отлично подходящий как для малых, так и для больших наборов данных

  * [Автозаполнение запросов](Searching/Autocomplete.md)
  * [Нечеткий поиск](Searching/Spell_correction.md#Fuzzy-Search)
  * Более 20 [операторов полнотекстового поиска](https://play.manticoresearch.com/fulltextintro/)<!--{target="_blank"}--> и более 20 факторов ранжирования
  * [Пользовательское ранжирование](Searching/Sorting_and_ranking.md#Ranking-overview)
  * [Стемминг](Creating_a_table/NLP_and_tokenization/Morphology.md)
  * [Лемматизация](Creating_a_table/NLP_and_tokenization/Morphology.md)
  * [Стоп-слова](Creating_a_table/NLP_and_tokenization/Ignoring_stop-words.md)
  * [Синонимы](Creating_a_table/NLP_and_tokenization/Exceptions.md)
  * [Формы слов](Creating_a_table/NLP_and_tokenization/Wordforms.md)
  * [Продвинутая токенизация на уровне символов и слов](Creating_a_table/NLP_and_tokenization/Low-level_tokenization.md)
  * [Корректная сегментация китайского языка](Creating_a_table/NLP_and_tokenization/Languages_with_continuous_scripts.md)
  * [Подсветка текста](Searching/Highlighting.md)

#### Возможности векторного поиска
Manticore Search поддерживает возможность добавлять к каждому документу эмбеддинги, сгенерированные вашими моделями машинного обучения, а затем выполнять по ним [поиск ближайших соседей](Searching/KNN.md). Это позволяет строить такие функции, как поиск по сходству, рекомендации, семантический поиск, [диалоговый поиск](Searching/Conversational_search.md) и ранжирование релевантности на основе NLP-алгоритмов, а также поиск по изображениям, видео и звуку.

#### Диалоговый поиск
Manticore Search поддерживает [диалоговый поиск](Searching/Conversational_search.md) по уже существующим векторизованным таблицам. Он извлекает наиболее релевантные строки с помощью KNN-поиска, использует эти строки вместе с историей диалога как контекст для LLM и может отвечать через SQL `CALL CHAT` или HTTP JSON endpoint `/search`.

#### JOIN
Manticore Search поддерживает запросы [JOIN](Searching/Joining.md) через SQL и JSON, позволяя комбинировать данные из нескольких таблиц.

#### Многопоточность
Manticore Search использует умное параллелирование запросов для уменьшения времени отклика и полного использования всех ядер процессора при необходимости.

#### Оптимизатор запросов на основе стоимости
Оптимизатор запросов на основе стоимости использует статистические данные о индексированных данных для оценки относительных затрат различных планов выполнения для данного запроса. Это позволяет оптимизатору определить самый эффективный план получения нужных результатов, учитывая такие факторы, как размер индексированных данных, сложность запроса и доступные ресурсы.

#### Варианты хранения
Manticore предлагает как [построчное, так и колоночное хранение](Creating_a_table/Data_types.md#Row-wise-and-columnar-attribute-storages) для работы с наборами данных различных размеров. Традиционный и по умолчанию используемый построчный вариант доступен для наборов данных всех размеров — малых, средних и больших, тогда как колоночное хранение предоставляется через Manticore Columnar Library для еще больших наборов данных. Главное отличие этих вариантов хранения в том, что построчное хранение требует, чтобы все атрибуты (исключая полнотекстовые поля) хранились в ОЗУ для оптимальной производительности, тогда как колоночное хранение этого не требует, обеспечивая меньшее потребление памяти, но с возможным слегка более медленным выполнением (как демонстрируют статистические данные на https://db-benchmarks.com/).

#### Автоматические вторичные индексы
[Manticore Columnar Library](https://github.com/manticoresoftware/columnar/) использует индекс [Piecewise Geometric Model index](https://github.com/gvinciguerra/PGM-index), который использует обучаемое отображение между индексируемыми ключами и их расположением в памяти. Компактность этого отображения, в сочетании с особым рекурсивным алгоритмом построения, делает PGM-индекс структурой данных, которая превосходит традиционные индексы по объему памяти на порядки, при этом обеспечивая лучшее время выполнения запросов и обновлений. Вторичные индексы включены по умолчанию для всех числовых и строковых полей, и их можно включить для json-атрибутов.

#### SQL-первый
Нативный синтаксис Manticore — SQL, он поддерживает SQL через HTTP и протокол MySQL, что позволяет подключаться через популярные клиенты mysql на любом языке программирования.

#### JSON через HTTP
Для более программируемого подхода к управлению данными и схемами Manticore предоставляет протокол [HTTP JSON](Searching/Full_text_matching/Basic_usage.md#HTTP-JSON), аналогичный Elasticsearch.

#### Шардированные таблицы
Manticore поддерживает [таблицы `type='sharding'`](Creating_a_table/Creating_a_sharded_table/Creating_a_sharded_table.md), которые прозрачно распределяют чтение и запись между несколькими физическими шардами на одном узле или в кластере репликации, повышая масштабируемость записи и одновременно упрощая маршрутизацию, отказоустойчивое переключение и эксплуатационное управление.

#### Аутентификация и авторизация
Manticore предоставляет встроенные [аутентификацию и авторизацию](Security/Authentication_and_authorization.md) для MySQL, HTTP/HTTPS, распределённых удалённых агентов и операций, связанных с репликацией, с пользователями, bearer-токенами и детальными правами доступа.

#### Записи совместимые с Elasticsearch
Вы можете выполнять совместимые с Elasticsearch [insert](Data_creation_and_modification/Adding_documents_to_a_table/Adding_documents_to_a_real-time_table.md#Adding-documents-to-a-real-time-table) и [replace](Data_creation_and_modification/Updating_documents/REPLACE.md#REPLACE) JSON-запросы, что позволяет использовать Manticore с такими инструментами, как Logstash (версии < 7.13), Filebeat и другими из семейства Beats.

#### Декларативное и императивное управление схемами
Легко создавать, обновлять и удалять таблицы онлайн или через конфигурационный файл.

#### Преимущества C++ и удобство PHP
Демон Manticore Search разработан на C++, что обеспечивает быстрое время запуска и эффективное использование памяти. Низкоуровневые оптимизации дополнительно повышают производительность. Другой важный компонент, называемый [Manticore Buddy](https://github.com/manticoresoftware/manticoresearch-buddy), написан на PHP и используется для высокоуровневой функциональности, не требующей молниеносного времени отклика или чрезвычайно высокой вычислительной мощности. Хотя внесение вклада в код C++ может быть сложной задачей, добавление новой SQL/JSON команды с помощью Manticore Buddy должно быть простым процессом.

#### Вставки в реальном времени
Новые или обновленные документы могут быть прочитаны немедленно.

#### Интерактивные курсы для легкого обучения
Мы предлагаем [бесплатные интерактивные курсы](https://play.manticoresearch.com/), чтобы сделать обучение легким.

#### Транзакции
Хотя Manticore не полностью соответствует ACID, он поддерживает изолированные транзакции для атомарных изменений и бинарное логирование для безопасной записи.

#### Встроенная репликация и балансировка нагрузки
Данные могут быть распределены по серверам и центрам обработки данных, причем любой узел Manticore Search может выступать как балансировщиком нагрузки, так и узлом данных. Manticore реализует практически синхронную мультимастерную [репликацию](https://play.manticoresearch.com/replication/) с использованием библиотеки [Galera](https://galeracluster.com/), обеспечивая согласованность данных на всех узлах, предотвращая потерю данных и предоставляя исключительную производительность репликации.

#### Встроенные возможности резервного копирования
Manticore оснащен внешним инструментом [manticore-backup](Securing_and_compacting_a_table/Backup_and_restore.md) и SQL-командой [BACKUP](Securing_and_compacting_a_table/Backup_and_restore.md#BACKUP-SQL-command-reference) для упрощения процесса резервного копирования и восстановления ваших данных. В качестве альтернативы вы можете использовать [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) для [создания логических резервных копий](Securing_and_compacting_a_table/Backup_and_restore.md#Backup-and-restore-with-mysqldump).

#### Синхронизация данных из коробки
Инструмент `indexer` и всеобъемлющий синтаксис конфигурации Manticore позволяют легко синхронизировать данные из таких источников, как MySQL, PostgreSQL, совместимые с ODBC базы данных, XML и CSV.

#### Варианты интеграции
Вы можете интегрировать Manticore Search с сервером MySQL/MariaDB, используя [движок FEDERATED](Extensions/FEDERATED.md) или через [ProxySQL](https://manticoresearch.com/blog/using-proxysql-to-route-inserts-in-a-distributed-realtime-index/).

Вы можете использовать [Apache Superset](https://manticoresearch.com/blog/manticoresearch-apache-superset-integration/) и [Grafana](https://manticoresearch.com/blog/manticoresearch-grafana-integration/) для визуализации данных, хранящихся в Manticore. Различные инструменты MySQL могут быть использованы для интерактивной разработки запросов Manticore, такие как [HeidiSQL](https://www.heidisql.com/) и [DBForge](https://www.devart.com/dbforge/).

Вы также можете использовать Manticore Search с [Kibana](Integration/Kibana.md).

#### Простая фильтрация потоков
Manticore предлагает специальный тип таблицы — таблицу типа "[percolate](Creating_a_table/Local_tables/Percolate_table.md)", которая позволяет искать запросы вместо данных, что делает ее эффективным инструментом для фильтрации потоков полнотекстовых данных. Просто сохраните ваши запросы в таблице, обрабатывайте поток данных, отправляя каждую партию документов в Manticore Search, и получайте только те результаты, которые соответствуют вашим сохраненным запросам.

#### Возможные области применения
Manticore Search универсален и может применяться в различных сценариях, включая:

- **Полнотекстовый поиск**:
  - Идеален для платформ электронной коммерции, обеспечивая быстрый и точный поиск товаров с такими функциями, как автодополнение и нечеткий поиск.
  - Идеально подходит для сайтов с большим объемом контента, позволяя пользователям быстро находить соответствующие статьи или документы.

- **Аналитика данных**:
  - Загружайте данные в Manticore Search с помощью [Beats/Logstash](https://manticoresearch.com/blog/integration-of-manticore-with-logstash-filebeat/), [Vector.dev](https://manticoresearch.com/blog/integration-of-manticore-with-vectordev/), [Fluentbit](https://manticoresearch.com/blog/integration-of-manticore-with-fluentbit/).
  - Эффективно анализируйте большие наборы данных, используя колоночное хранение Manticore и возможности OLAP.
  - Выполняйте сложные запросы к терабайтам данных с минимальной задержкой.
  - Визуализируйте данные с помощью Kibana, [Grafana](https://manticoresearch.com/blog/manticoresearch-grafana-integration/) или [Apache Superset](https://manticoresearch.com/blog/manticoresearch-apache-superset-integration/).

- **Диалоговый поиск и поиск с ИИ**:
  - Создавайте сценарии вопросов и ответов, а также ассистентские интерфейсы поверх уже существующего векторизованного контента.
  - Подкрепляйте ответы извлечением через KNN и историей диалога с помощью [диалогового поиска](Searching/Conversational_search.md).

- **Фасетный поиск**:
  - Позволяйте пользователям фильтровать результаты поиска по категориям, таким как цена, бренд или дата, для более точного поиска.

- **Геопространственный поиск**:
  - Реализуйте поиск на основе местоположения, например, поиск ближайших ресторанов или магазинов, с помощью геопространственных возможностей Manticore.

- **Исправление орфографии**:
  - Автоматически исправляйте опечатки пользователей в поисковых запросах для повышения точности поиска и удобства пользователей.

- **Автодополнение**:
  - Предоставляйте предложения в реальном времени по мере ввода пользователем, повышая удобство и скорость поиска.

- **Фильтрация потоков данных**:
  - Используйте таблицы типа percolate для эффективной фильтрации и обработки потоков данных в реальном времени, таких как ленты социальных сетей или данные журналов.


## Требования

* Архитектура: arm64 или x86_64
* ОС: на основе Debian (например, Debian, Ubuntu, Mint), на основе RHEL (например, RHEL, CentOS, Alma, Oracle Linux, Amazon Linux), Windows или MacOS.
* [Manticore Columnar Library](https://github.com/manticoresoftware/columnar), которая обеспечивает [колоночное хранение](Creating_a_table/Data_types.md#Row-wise-and-columnar-attribute-storages) и [вторичные индексы](Introduction.md#Automatic-secondary-indexes), требует процессор с SSE >= 4.2.
* Нет особых требований к дисковому пространству или оперативной памяти. Пустой экземпляр Manticore Search использует только около 40 МБ RSS RAM.

<!-- proofread -->

