# Meilisearch vs Manticore Search

Comparison of Meilisearch and Manticore Search, focusing on their feature set and data ingestion and search performance in three real-world benchmarks

## Введение

В постоянно развивающемся цифровом ландшафте поисковые системы играют все более важную роль в обеспечении функциональности поиска на различных платформах. Среди популярных поисковых систем [Meilisearch](https://www.meilisearch.com) и [Manticore Search](https://manticoresearch.com) выделяются своими уникальными предложениями. Однако выбор правильной поисковой системы для вашего проекта требует тщательного понимания их производительности, случаев использования и ограничений. Эта статья направлена на предоставление сравнения Meilisearch и Manticore Search, с акцентом на их функциональные возможности, а также производительность загрузки данных и поиска в трех реальных тестах: 10 миллионов логов NGINX, набор данных Hacker News на 1,1 миллиона документов и набор данных Hacker News на 116 миллионов документов, все доступные на [DB Benchmarks](https://db-benchmarks.com/). Все скрипты тестирования производительности, конфигурации и коллекции данных [доступны публично](https://github.com/db-benchmarks/db-benchmarks) и воспроизводимы.

## Релевантность полнотекстового поиска

Как Manticore, так и Meilisearch позиционируют себя как поисковые системы полнотекстового поиска. Ключевым элементом в поисковых системах полнотекстового поиска является то, как они ранжируют документы во время поиска.

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

Manticore Search очень гибок в контроле ранжирования поиска и предоставляет десятки факторов ранжирования; однако по умолчанию он использует классический алгоритм BM25 и его производные. [BM25](https://en.wikipedia.org/wiki/Okapi_BM25) — это хорошо зарекомендовавший себя алгоритм извлечения информации, который вычисляет релевантность документов на основе частоты термина и обратной частоты документа.

[Текущий запрос на изменение](https://github.com/beir-cellar/beir/pull/92) для бенчмарка BEIR (Benchmarking and Evaluation of Information Retrieval) демонстрирует приверженность Manticore Search к релевантности поиска. BEIR — это оценочная структура, которая измеряет производительность систем извлечения информации по различным задачам, таким как извлечение документов и вопросно-ответные системы. Результаты бенчмарка BEIR можно найти здесь: [https://docs.google.com/spreadsheets/d/1_ZyYkPJ_K0st9FJBrjbZqX14nmCCPVlE_y3a_y5KkYI/edit#gid=0](https://docs.google.com/spreadsheets/d/1_ZyYkPJ_K0st9FJBrjbZqX14nmCCPVlE_y3a_y5KkYI/edit#gid=0).

В отличие от этого, Meilisearch утверждает, что предлагает хорошую релевантность поиска, но нет публичных бенчмарков, чтобы подтвердить это утверждение. Согласно обсуждению на [Hacker News](https://news.ycombinator.com/item?id=35370081), пользователи Meilisearch упоминали о его релевантности поиска, но без каких-либо эмпирических доказательств трудно объективно сравнить его производительность с Manticore Search.

В целом, использование Manticore Search проверенных алгоритмов ранжирования и участие в бенчмарке BEIR подчеркивает его приверженность к предоставлению высокорелевантных результатов поиска, что делает его надежным выбором для различных приложений. Хотя Meilisearch также может преуспеть в релевантности полнотекстового поиска, трудно сделать окончательное заявление, поскольку нет установленных бенчмарков, и используемый алгоритм не широко известен.

## Размер индекса и загрузка данных

Manticore Search демонстрирует свою способность эффективно обрабатывать большие наборы данных (например, [тест на 1,7 миллиарда документов такси](https://github.com/db-benchmarks/db-benchmarks/tree/main/tests/taxi) или просто [Craigslist.org](https://craigslist.org)) с помощью построчного и колонного хранения. Колонный подход специально разработан для ускорения производительности поиска и снижения потребления ОЗУ на больших наборах данных. В отличие от этого, построчное хранение по умолчанию в Manticore Search предлагает непревзойденную производительность на малых и средних наборах данных. Эта гибкость делает Manticore Search идеальным выбором для широкого спектра приложений.

Meilisearch, с другой стороны, испытывает трудности с большими наборами данных, так как мы не смогли загрузить [большой набор данных Hacker News](https://github.com/db-benchmarks/db-benchmarks/tree/main/tests/hn) в поисковую систему даже после 2 дней загрузки. Более того, Meilisearch испытывает ухудшение производительности при загрузке документов. По мере роста набора данных время, необходимое для загрузки каждой последующей партии документов, увеличивается. Эта проблема с производительностью указывает на то, что у Meilisearch есть проблемы со масштабируемостью данных и это может быть проблемой для приложений, которые требуют загрузки данных в реальном времени или индексации больших наборов данных. Meilisearch обрабатывает обновления документов в одной очереди, что может привести к узким местам и снижению производительности со временем.

Важно отметить, что обновления документов в Meilisearch не мгновенно отражаются в поисковых запросах. Это связано с тем, что Meilisearch использует асинхронную очередь задач для обработки обновлений, обеспечивая стабильную производительность поиска даже во время интенсивных операций индексации.

При обновлении документа изменение добавляется в очередь задач и обрабатывается движком в фоновом режиме. Как только задача завершена, обновленные данные становятся доступными в результатах поиска. Время обработки может варьироваться в зависимости от размера обновления и ресурсов сервера. Для мониторинга статуса задач вы можете использовать [Tasks API](https://www.meilisearch.com/docs/reference/api/tasks), который предлагает информацию о ходе выполнения и завершении задач.

Manticore предлагает возможности реального времени для вставки, замены и удаления, позволяя изменениям быть немедленно видимыми, как только запрос завершен.

В заключение, хотя Meilisearch предоставляет быстрые и эффективные возможности поиска, имейте в виду, что обновления документов могут не быть немедленно видимыми в результатах поиска из-за асинхронной обработки задач.

## Производительность поиска

Meilisearch известен своей впечатляющей скоростью, [превосходя Elasticsearch во многих случаях](https://db-benchmarks.com/?cache=fast_avg&engines=elasticsearch_7.15.2%2Cmeilisearch_1.1.1&tests=hn_small&memory=110000&queries=0%2C1%2C2%2C3%2C5%2C6%2C7%2C8%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C25%2C26%2C27). Однако его производительность наиболее заметна при работе с небольшими наборами данных. По мере увеличения размера набора данных производительность Meilisearch может снижаться.

Manticore Search постоянно обеспечивает быструю производительность запросов для различных типов запросов и наборов данных, превосходя как Meilisearch, так и [Elasticsearch](https://manticoresearch.com/blog/manticore-alternative-to-elasticsearch/). Благодаря оптимизированным методам индексирования построчно и колонно, Manticore гарантирует отзывчивый поиск, что критически важно для поддержания вовлечённости пользователей в высокопроизводительных приложениях.

В отличие от этого, Meilisearch испытывает трудности с эффективной обработкой больших наборов данных и страдает от деградации производительности во время загрузки документов. Поэтому Manticore является лучшим выбором для тех, кто не хочет беспокоиться о размере своего набора данных.

## Тесты производительности

### **Небольшой набор данных Hacker News (Комментарии Hacker News)**

Бенчмарк небольшого набора данных Hacker News, включающий коллекцию из 1,1 миллиона отобранных комментариев Hacker News с числовыми полями (источник: [https://zenodo.org/record/45901/](https://zenodo.org/record/45901/)), подчёркивает более высокую производительность поиска Manticore Search по сравнению с Meilisearch. Набор данных содержит текстовую информацию из комментариев и числовые поля, такие как количество голосов, метки времени и идентификаторы пользователей. Тест бенчмарка включает выполнение полнотекстовых и аналитических запросов для оценки возможностей поисковых движков.

![Бенчмарк небольшого набора данных Hacker News](./manticoresearch-vs-meilisearch/hn_small.png)

Результаты бенчмарка также можно проверить через [эту ссылку](https://db-benchmarks.com/?cache=slowest%2Cfast_avg&engines=manticoresearch_6.0.2%2Cmeilisearch_1.0.0&tests=hn_small&memory=110000&queries=0%2C1%2C2%2C3%2C5%2C6%2C7%2C8%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C25%2C26%2C27).

К сожалению, Meilisearch не способен выполнять многие типы запросов, такие как агрегирующие запросы и запросы с отрицательными полнотекстовыми терминами.

Интересным аспектом этого бенчмарка является значительная разница в использовании дискового пространства между двумя поисковыми движками:

```bash
root@perf3 /perf/test_engines/tests/hn_small/manticore # du -sh idx
1.1G    idx
```

```bash
root@perf3 /perf/test_engines/tests/hn_small/meilisearch # du -sh .
38G     .
```

Meilisearch требует **34x** больше дискового пространства для хранения того же набора данных по сравнению с Manticore Search.

Что касается производительности загрузки данных, потребовалось:
* Meilisearch 31 минута
* Manticore 65 секунд

для полного завершения загрузки данных.

### **Большой набор данных Hacker News (116 миллионов комментариев)**

Этот тест использует тот же набор из 1,1 миллиона отобранных комментариев Hacker News (источник: [https://zenodo.org/record/45901/](https://zenodo.org/record/45901/)), но умноженный в 100 раз, что приводит к примерно [116 миллионам документов](https://github.com/db-benchmarks/db-benchmarks/tree/main/tests/hn). Бенчмарк охватывает как полнотекстовые, так и аналитические запросы, делая его отличным тестовым случаем для оценки возможностей поисковых движков в более крупном масштабе.

Meilisearch не смог загрузить данные за 2 дня. Его производительность вставок ухудшалась по мере роста базы данных. Мы пытались оптимизировать его, но безуспешно, так как все пакеты, даже когда мы пытались выполнять их параллельно, попадали в одну очередь. В результате нам не удалось достичь какого-либо улучшения загрузки данных для Meilisearch. Meilisearch потребовалось около 2 дней, чтобы загрузить лишь 38% данных, что уже заняло более 850 ГБ дискового пространства. Это резко контрастирует с Manticore Search, который хранит весь набор данных, используя примерно 100 ГБ дискового пространства, и загрузка заняла 2 часа 9 минут на одном ядре процессора (что практически линейно масштабируется).

Неспособность Meilisearch обработать весь большой набор данных Hacker News подчёркивает его проблемы с управлением и масштабированием более обширных коллекций данных. Превосходная производительность Manticore Search в этом бенчмарке подчёркивает его способность справляться с требованиями крупномасштабного поиска, делая его более подходящим выбором для приложений с большими коллекциями данных.

Поскольку мы не смогли загрузить данные в Meilisearch, вы можете посмотреть результаты только для Manticore [здесь](https://db-benchmarks.com/?cache=fast_avg&engines=manticoresearch_rowwise_6.0.2&tests=hn&memory=110000&queries=0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27).

### 10 миллионов логов NGINX

Этот тест основан на наборе данных, содержащем 10 миллионов логов NGINX. Источник этого набора данных — [Kaggle](https://www.kaggle.com/datasets/eliasdabbas/web-server-access-logs). Логи веб‑сервера фиксируют различные события, предоставляя ценные сведения о посетителях сайта, поведении пользователей, сканерах, обращающихся к сайту, бизнес‑аналитике, проблемах безопасности и многом другом. Бенчмарк использует отобранный список типичных запросов, которые может выполнить случайный инженер DevOps.

Manticore Search и Meilisearch продемонстрировали значительную разницу в использовании дискового пространства для набора данных. Manticore Search использовал 4,4 ГБ дискового пространства, тогда как Meilisearch потребил 69 ГБ, что примерно **в 15 раз больше**, чем у Manticore. Хотя разница менее драматична, чем в тесте с небольшим набором данных Hacker News, она всё же заметна, особенно учитывая, что набор данных Logs10m содержит меньше текстовых данных.

Meilisearch потребовалось около **20 минут**, чтобы заполнить данные, тогда как Manticore завершил за **6 минут**.

Подробное сравнение результатов производительности можно найти по [предоставленной ссылке](https://db-benchmarks.com/?cache=fast_avg&engines=manticoresearch_columnar_6.0.2%2Cmeilisearch_1.1.1&tests=logs10m&memory=110000&queries=3%2C8%2C9). Обратите внимание, что многие пустые результаты обусловлены тем, что Meilisearch не способен обрабатывать определённые типы запросов. В результате эти запросы были пропущены в процессе бенчмаркинга.

![Бенчмарк Logs10m](./manticoresearch-vs-meilisearch/logs10m.png)

## **Сравнение функций** Manticore Search **и Meilisearch**

- **Полнотекстовое сопоставление**
  - ✅ Manticore: более 20 полнотекстовых операторов. Поиск percolate (поиск в обратном порядке).
  - ❌ Meilisearch: очень простой: AND и поиск фраз. Поиск percolate отсутствует.
- **Релевантность поиска**
  - ✅ Manticore использует проверенные классические алгоритмы ранжирования (BM25, BM15). Релевантность подтверждена бенчмарками. 7 встроенных ранкеров и пользовательский ранкер с [20+ факторами ранжирования](https://manual.manticoresearch.com/Searching/Sorting_and_ranking#Quick-summary-of-the-ranking-factors).
  - ❌ Meilisearch утверждает хорошую релевантность поиска, но не имеет публичных бенчмарков для проверки. [6 правил ранжирования](https://www.meilisearch.com/docs/learn/core_concepts/relevancy#ranking-rules).
- **Хранилище**
  - ✅ Manticore: собственное строковое хранилище для небольших/средних наборов данных, собственное колонковое хранилище с меньшими требованиями к ОЗУ, подходящее для больших наборов данных
  - ❌ Meilisearch: [LMDB](http://www.lmdb.tech/doc/) со всеми его преимуществами, недостатками и последствиями: например, требование 205 ГБ виртуальной памяти для набора данных 9,1 МБ выглядит странно.
- **Размер индекса и загрузка данных**
  - ✅ Manticore поддерживает большие наборы данных с помощью колонкового и строкового индексирования. Легко синхронизирует данные из MySQL, PostgreSQL, MS SQL и любой другой базы, поддерживающей ODBC, XML и CSV. Реальные транзакционные вставки, замены и удаления в реальном времени. Бинарный журнал. Обновления значений атрибутов на месте.
  - ❌ Meilisearch сталкивается с трудностями при работе с большими наборами данных и наблюдает падение производительности во время загрузки документов. Можно загружать CSV и JSON. Только асинхронное добавление документов. Обновления на месте отсутствуют.
- **Схема**
  - ✅ Manticore: Авто-схема. Авто-ID. Все атрибуты по умолчанию фильтруются, сортируются и группируются.
  - ❌ Meilisearch: Авто-схема. ID может быть автоматически выбран из документа. По умолчанию все поля доступны для полнотекстового поиска, но атрибуты не фильтруются и не сортируются. Необходимо определить схему до загрузки данных в индекс, чтобы избежать полной переиндексации.
- **Производительность поиска**
  - ✅ Manticore превосходит Meilisearch по производительности поиска.
  - ❌ Meilisearch менее подходит для приложений, требующих быстрой и масштабируемой функции поиска.
- **Высокая доступность**
  - ✅ Manticore: репликация, распределённые таблицы с поддержкой удалённых агентов и зеркалированием, а также несколько стратегий HA.
  - ❌ Meilisearch: нет репликации, нет распределённого поиска, нет зеркалирования.
- **Толерантность к опечаткам**
  - ✅ Meilisearch предлагает более простую толерантность к опечаткам.
  - ❌ Manticore может обрабатывать опечатки, но требует больших усилий в приложении.
- **Предпросмотр поиска**
  - ✅ Meilisearch имеет удобный предварительный просмотр поиска — встроенный UI для поиска по данным в экземпляре.
  - ❌ Manticore не имеет этой функции.
- **Токенизация**
  - ✅ Manticore: высоко гибкая токенизация: символы токенов, смешанные символы, игнорируемые символы, правила токенизации на основе регулярных выражений и т.д., словоформы, стоп-слова, синонимы, возможность создания плагинов токенизации, морфология для различных языков на основе стеммеров и лемматизаторов.
  - ❌ Meilisearch: токенизатор зависит от языка: Unicode‑сегментатор для большинства языков, специальные токенизаторы для китайского, японского, иврита и тайского. Синонимы. Стоп‑слова.
- **Аутентификация**
  - ✅ Meilisearch: встроенная аутентификация.
  - ❌ Manticore: встроенной аутентификации нет.
- **Интерфейсы**
  - ✅ Manticore: SQL‑первый, можно подключаться через клиент MySQL. HTTP JSON интерфейс. Бинарный интерфейс для чрезвычайно низких задержек. Клиенты для: PHP, Python, JavaScript, Java, C#, Elixir, Golang.
  - ❌ Meilisearch: HTTP JSON интерфейс. Клиенты для: JavaScript, Python, PHP, Java, Ruby, Golang, C#, Rust, Swift, Dart.
- **Сценарии использования**
  - ✅ Manticore: поиск в логах, платформы электронной коммерции, контентно‑насыщенные сайты, корпоративные приложения.
  - ❌ Meilisearch: небольшие проекты с ограниченными данными и требованиями к поиску.

## Сценарии использования

### Сценарии использования Manticore Search

1. **Платформы электронной коммерции:** Manticore Search может эффективно управлять большими каталогами товаров, предоставляя релевантные результаты поиска клиентам с помощью своей [расширенной фасетной функциональности](https://manual.manticoresearch.com/Searching/Faceted_search#Faceted-search). Это повышает коэффициент конверсии и улучшает общий опыт покупок, делая эту функцию очень востребованной для платформ электронной коммерции.
2. **Контентно‑насыщенные веб‑сайты:** Manticore Search может индексировать и искать по обширным библиотекам контента, таким как новостные сайты, блоги или базы знаний. При правильном полнотекстовом ранжировании пользователи быстро и эффективно находят нужную информацию, что способствует повышению вовлечённости.
3. **Корпоративные приложения:** Масштабируемость и расширенные возможности поиска Manticore Search делают его идеальным для крупномасштабных корпоративных решений, включая системы управления взаимоотношениями с клиентами (CRM), системы управления документами и интранет‑порталы, где точный и эффективный поиск критически важен.
4. **Поиск в логах:** Manticore Search отлично подходит для поиска в логах, так как может эффективно обрабатывать и искать по огромным журналам. Его скорость и производительность делают его отличным выбором для анализа и мониторинга логов.

### Сценарии использования Meilisearch

Небольшие проекты: лёгкий характер Meilisearch и простота развертывания делают его подходящим для небольших проектов с ограниченными данными и требованиями к поиску, таких как небольшая электронная коммерция, личные сайты, локальные каталоги или простые веб‑приложения, где быстрая загрузка данных, расширенные функции поиска и масштабируемость не являются критическими.

## Заключение

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

Meilisearch подходит для небольших проектов, где расширенные функции поиска и масштабируемость не являются критическими.

В конечном итоге выбор между Manticore Search и Meilisearch будет зависеть от ваших конкретных потребностей и требований проекта.
