⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.
blog-post

Meilisearch vs Manticore Search

Введение

В постоянно развивающемся цифровом ландшафте поисковые системы играют все более важную роль в обеспечении функциональности поиска на различных платформах. Среди популярных поисковых систем Meilisearch и Manticore Search выделяются своими уникальными предложениями. Однако выбор правильной поисковой системы для вашего проекта требует тщательного понимания их производительности, случаев использования и ограничений. Эта статья направлена на предоставление сравнения Meilisearch и Manticore Search, с акцентом на их функциональные возможности, а также производительность загрузки данных и поиска в трех реальных тестах: 10 миллионов логов NGINX, набор данных Hacker News на 1,1 миллиона документов и набор данных Hacker News на 116 миллионов документов, все доступные на DB Benchmarks . Все скрипты тестирования производительности, конфигурации и коллекции данных доступны публично и воспроизводимы.

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

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

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

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

Текущий запрос на изменение для бенчмарка 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 .

В отличие от этого, Meilisearch утверждает, что предлагает хорошую релевантность поиска, но нет публичных бенчмарков, чтобы подтвердить это утверждение. Согласно обсуждению на Hacker News , пользователи Meilisearch упоминали о его релевантности поиска, но без каких-либо эмпирических доказательств трудно объективно сравнить его производительность с Manticore Search.

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

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

Manticore Search демонстрирует свою способность эффективно обрабатывать большие наборы данных (например, тест на 1,7 миллиарда документов такси или просто Craigslist.org ) с помощью построчного и колонного хранения. Колонный подход специально разработан для ускорения производительности поиска и снижения потребления ОЗУ на больших наборах данных. В отличие от этого, построчное хранение по умолчанию в Manticore Search предлагает непревзойденную производительность на малых и средних наборах данных. Эта гибкость делает Manticore Search идеальным выбором для широкого спектра приложений.

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

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

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

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

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

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

Meilisearch известен своей впечатляющей скоростью, превосходя Elasticsearch во многих случаях . Однако его производительность наиболее заметна при работе с небольшими наборами данных. По мере увеличения размера набора данных производительность Meilisearch может снижаться.

Manticore Search постоянно обеспечивает быструю производительность запросов для различных типов запросов и наборов данных, превосходя как Meilisearch, так и Elasticsearch . Благодаря оптимизированным методам индексирования построчно и колонно, Manticore гарантирует отзывчивый поиск, что критически важно для поддержания вовлечённости пользователей в высокопроизводительных приложениях.

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

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

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

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

Бенчмарк небольшого набора данных Hacker News

Результаты бенчмарка также можно проверить через эту ссылку .

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

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

root@perf3 /perf/test_engines/tests/hn_small/manticore # du -sh idx
1.1G    idx
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/ ), но умноженный в 100 раз, что приводит к примерно 116 миллионам документов . Бенчмарк охватывает как полнотекстовые, так и аналитические запросы, делая его отличным тестовым случаем для оценки возможностей поисковых движков в более крупном масштабе.

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

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

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

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

Этот тест основан на наборе данных, содержащем 10 миллионов логов NGINX. Источник этого набора данных — Kaggle . Логи веб‑сервера фиксируют различные события, предоставляя ценные сведения о посетителях сайта, поведении пользователей, сканерах, обращающихся к сайту, бизнес‑аналитике, проблемах безопасности и многом другом. Бенчмарк использует отобранный список типичных запросов, которые может выполнить случайный инженер DevOps.

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

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

Подробное сравнение результатов производительности можно найти по предоставленной ссылке . Обратите внимание, что многие пустые результаты обусловлены тем, что Meilisearch не способен обрабатывать определённые типы запросов. В результате эти запросы были пропущены в процессе бенчмаркинга.

Бенчмарк Logs10m

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

  • Полнотекстовое сопоставление
    • ✅ Manticore: более 20 полнотекстовых операторов. Поиск percolate (поиск в обратном порядке).
    • ❌ Meilisearch: очень простой: AND и поиск фраз. Поиск percolate отсутствует.
  • Релевантность поиска
    • ✅ Manticore использует проверенные классические алгоритмы ранжирования (BM25, BM15). Релевантность подтверждена бенчмарками. 7 встроенных ранкеров и пользовательский ранкер с 20+ факторами ранжирования .
    • ❌ Meilisearch утверждает хорошую релевантность поиска, но не имеет публичных бенчмарков для проверки. 6 правил ранжирования .
  • Хранилище
    • ✅ Manticore: собственное строковое хранилище для небольших/средних наборов данных, собственное колонковое хранилище с меньшими требованиями к ОЗУ, подходящее для больших наборов данных
    • ❌ Meilisearch: LMDB со всеми его преимуществами, недостатками и последствиями: например, требование 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: небольшие проекты с ограниченными данными и требованиями к поиску.

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

  1. Платформы электронной коммерции: Manticore Search может эффективно управлять большими каталогами товаров, предоставляя релевантные результаты поиска клиентам с помощью своей расширенной фасетной функциональности . Это повышает коэффициент конверсии и улучшает общий опыт покупок, делая эту функцию очень востребованной для платформ электронной коммерции.
  2. Контентно‑насыщенные веб‑сайты: Manticore Search может индексировать и искать по обширным библиотекам контента, таким как новостные сайты, блоги или базы знаний. При правильном полнотекстовом ранжировании пользователи быстро и эффективно находят нужную информацию, что способствует повышению вовлечённости.
  3. Корпоративные приложения: Масштабируемость и расширенные возможности поиска Manticore Search делают его идеальным для крупномасштабных корпоративных решений, включая системы управления взаимоотношениями с клиентами (CRM), системы управления документами и интранет‑порталы, где точный и эффективный поиск критически важен.
  4. Поиск в логах: Manticore Search отлично подходит для поиска в логах, так как может эффективно обрабатывать и искать по огромным журналам. Его скорость и производительность делают его отличным выбором для анализа и мониторинга логов.

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

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

Заключение

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

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

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

Установить Manticore Search

Установить Manticore Search