Введение
В всегда меняющемся цифровом ландшафте поисковые движки играют все более важную роль в обеспечении функций поиска на различных платформах. Среди популярных поисковых систем выделяются 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. Набор данных содержит текстовые данные из комментариев и числовые поля, такие как голосования, временные метки и идентификаторы пользователей. Бенчмарк включает выполнение полнотекстовых и аналитических запросов для оценки возможностей поисковых систем.
Результаты бенчмарка также можно проверить по этой ссылке .
К сожалению, 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 не смог обрабатывать определенные типы запросов. В результате эти запросы были пропущены в процессе бенчмаркинга.
Сравнение функций 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: проекты небольшого масштаба с ограниченными данными и требованиями к поиску.
Сценарии использования
Сценарии использования для Manticore Search
- Платформы электронной коммерции: Manticore Search может эффективно управлять большими каталогами продуктов, предоставляя релевантные результаты поиска для клиентов с помощью своей расширенной функциональности с фильтрацией . Это повышает коэффициенты конверсии и улучшает общий процесс покупок, делая его востребованной функцией для платформ электронной коммерции.
- Сайты с богатым контентом: Manticore Search может индексировать и осуществлять поиск по обширным библиотекам контента, таким как новостные сайты, блоги или базы знаний. С правильным полнотекстовым ранжированием он обеспечивает быстрый и эффективный поиск необходимой информации для пользователей, что способствует большему вовлечению.
- Корпоративные приложения: Масштабируемость и продвинутые возможности поиска Manticore Search делают его идеальным для крупных корпоративных приложений, включая системы управления взаимоотношениями с клиентами (CRM), системы управления документами и интраネット-порталы, где критично важна точная и эффективная функциональность поиска.
- Поиск логов: Manticore Search отлично подходит для поиска в логах, так как он может эффективно обрабатывать и осуществлять поиск по огромным логам. Его скорость и производительность делают его отличным выбором для анализа и мониторинга логов.
Сценарии использования для Meilisearch
Проекты небольшого масштаба: Легковесная природа Meilisearch и простота развертывания делают его подходящим для небольших проектов с ограниченными данными и требованиями к поиску, таких как небольшая электронная коммерция, персональные сайты, локальные каталоги или простые веб-приложения, где быстрая загрузка данных, продвинутые функции поиска и масштабируемость не являются ключевыми факторами.
Заключение
При выборе поискового движка для вашего проекта крайне важно учитывать такие факторы, как релевантность поиска, масштабируемость и производительность. Manticore Search выделяется как превосходный выбор для разнообразных приложений и сценариев использования, обеспечивая оптимальную производительность поиска и релевантность независимо от размера набора данных. Его продвинутые возможности поиска и аналитики делают его надежным выбором для проектов, требующих функциональности поиска высокой производительности.
Meilisearch подходит для небольших проектов, где расширенные функции поиска и масштабируемость не являются критическими факторами.
В конечном итоге, выбор между Manticore Search и Meilisearch будет зависеть от ваших конкретных потребностей и требований к проекту.