blog-post

Meilisearch против 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 минут.

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

Бенчмарк Logs10m

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

  • Полнотекстовое соответствие
    • ✅ Manticore: более 20 операторов полнотекстового поиска. Обратный поиск (поиск в обратном порядке).
    • ❌ Meilisearch: очень просто: поиск по AND и фразам. Нет перколяционного поиска.
  • Релевантность поиска
    • ✅ 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: репликация, распределенные таблицы, поддерживающие удаленные агенты с зеркалированием, и несколько стратегий высокой доступности.
    • ❌ Meilisearch: нет репликации, нет распределенного поиска, нет зеркалирования.
  • Толерантность к опечаткам
    • ✅ Meilisearch предлагает более легкую толерантность к опечаткам.
    • ❌ Manticore может обрабатывать толерантность к опечаткам, но требует больших усилий в приложении.
  • Предварительный просмотр поиска
    • ✅ Meilisearch имеет полезный предварительный просмотр поиска - встроенный интерфейс для поиска по данным в экземпляре.
    • ❌ Manticore не имеет этой функции.
  • Токенизация
    • ✅ Manticore: высоко гибкая токенизация: символы токенов, смешанные символы, игнорируемые символы, правила токенизации с использованием регулярных выражений и т.д., формы слов, стоп-слова, синонимы, возможность создания плагинов токенизации, морфология для различных языков на основе стеммеров и лемматизаторов.
    • ❌ Meilisearch: токенизатор зависит от языка: сегментатор Unicode для большинства языков, специфические токенизаторы для китайского, японского, иврита и тайского. Синонимы. Стоп-слова.
  • Аутентификация
    • ✅ Meilisearch: встроенная аутентификация.
    • ❌ Manticore: нет встроенной аутентификации.
  • Интерфейсы
    • ✅ Manticore: SQL-first, вы можете подключиться с помощью клиента 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