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-первичный, вы можете подключиться с помощью клиента 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