blog-post

Manticore Search 5

Сегодня команда Manticore рада объявить о Manticore Search 5.0.0 . Нам потребовалось почти 5 месяцев, 450 коммитов и почти 50 тысяч строк измененного кода. Мы хотим поблагодарить всех наших:

которые помогали нам на нашем пути. Пожалуйста, приветствуйте новую версию Manticore Search 5.0.0!

Все хранится по умолчанию

Наши старые пользователи могут помнить, что когда Manticore был форкнут от Sphinx в 2017 году, его возможности работы с базами данных были сильно ограничены в том смысле, что он больше походил на расширение для другой базы данных, чем на базу данных сам по себе, например:

  • если вы хотели хранить оригинальные содержимое, вам нужно было создать строковый атрибут и поместить его туда, что может занять много ОЗУ, так как у Manticore тогда было только построчное хранилище, которое требует хранения всех атрибутов в ОЗУ.
  • и вы даже не могли выполнить CREATE TABLE, чтобы создать новую таблицу, вы могли только добавить новую схему в файл конфигурации.

Затем в Manticore мы добавили:

  • Хранение документов для полнотекстовых полей, что сделало возможным экономить ОЗУ, храня оригинальные документы на диске.
  • Режим реального времени, чтобы включить команды, такие как CREATE TABLE.
  • Новый тип данных text, который индексируется + хранится по умолчанию.

Но в обычном режиме вам все еще нужно было указывать stored_fields = ....

Теперь вам это больше не нужно, все хранится по умолчанию с Manticore 5. Если вам это не нужно, вы можете отключить это, указав stored_fields = (пустое значение). Это сделает все поля не хранимыми.

Вторичные индексы

Manticore 5 включает поддержку Manticore Columnar Library 1.15.2 , которая добавляет поддержку вторичных индексов . Функциональность предоставляется в Manticore 5 на стадии бета-тестирования, поэтому:

  • Создание вторичных индексов включено по умолчанию для обычных и реальных столбцовых и построчных индексов (если используется Manticore Columnar Library ),
  • но чтобы включить это для поиска, вам нужно установить secondary_indexes = 1 либо в вашем файле конфигурации, либо с помощью SET GLOBAL .

Новая функциональность поддерживается во всех операционных системах, кроме старых Debian Stretch и Ubuntu Xenial.

Manticore Columnar Library использует Piecewise Geometric Model index , который использует изученное отображение между индексируемыми ключами и их местоположением в памяти. Сжатие этого отображения, в сочетании с особым рекурсивным алгоритмом построения, делает PGM-индекс структурой данных, которая доминирует над традиционными индексами на порядки в пространстве, при этом предлагая лучшее время выполнения запросов и обновлений.

Псевдо-шардинг по умолчанию

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

Веб-интерфейс командной строки

Manticore 5 предоставляет новую /cli конечную точку для выполнения SQL-запросов по HTTP еще проще.

Web CLI

Режим только для чтения

Новый режим только для чтения позволяет вам указывать слушателей, которые обрабатывают только запросы на чтение, игнорируя любые записи. Это может быть полезно, если вы хотите сделать Manticore Search доступным из Интернета или менее безопасной части вашей локальной сети или просто хотите убедиться, что приложение, которое должно только читать, не может изменить ваши данные никаким образом.

Более быстрая загрузка данных

Ранее вы могли предоставлять несколько команд записи через HTTP JSON-протокол, но они обрабатывались по одной, теперь они обрабатываются как одна транзакция. Массовые INSERT/REPLACE/DELETE через JSON по HTTP теперь такие же массовые, как и через SQL. И даже больше:

Кодирование с разбиением на части

Manticore 5 получает поддержку кодирования с разбиением на части в HTTP-протоколе. Теперь вы можете использовать разбиение на части в вашем приложении для передачи больших партий с меньшими затратами ресурсов (так как вам не нужно вычислять Content-Length). На стороне сервера Manticore теперь всегда обрабатывает входящие HTTP-данные в потоковом режиме, не дожидаясь, пока вся партия будет передана, как это было ранее, что:

  • уменьшает пиковое потребление ОЗУ, что снижает вероятность OOM
  • уменьшает время ответа (наши тесты показали снижение на 11% для обработки партии в 100 МБ)
  • позволяет вам преодолеть max_packet_size и передавать партии, значительно превышающие максимальное допустимое значение max_packet_size (128 МБ), например, 1 ГБ за раз.

100 Continue

В дополнение к этому, HTTP-протокол теперь поддерживает заголовок 100 Continue, который позволяет вам быстрее передавать большие партии из curl (включая библиотеки curl, используемые различными языками программирования). Curl по умолчанию делает Expect: 100-continue и ждет некоторое время перед фактической отправкой партии. Ранее вам нужно было добавлять заголовок Expect: , теперь это не требуется.

Все это делает Manticore 5 быстрее в плане загрузки данных через HTTP.

Manticore Search без полнотекстового поиска

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

Быстрая выборка столбцовых атрибутов

In Manticore 5 мы добавили Быструю выборку для атрибутов, поддерживаемых Manticore Columnar Library : запросы типа select * from <columnar table> теперь выполняются значительно быстрее, чем ранее, особенно если в схеме много полей.

Неявный порог

Теперь Manticore не тратит время и ресурсы на обработку данных, которые вам не нужны в результирующем наборе, автоматически выбирая оптимальное значение cutoff. Для некоторых запросов это значительно улучшает производительность. Недостаток в том, что это влияет на total_found в SHOW META и hits.total в JSON-выводе. Теперь это значение точно только в случае, если вы видите total_relation: eq, в то время как total_relation: gte означает, что фактическое количество совпадающих документов больше, чем значение total_found, которое вы получили. Чтобы сохранить предыдущее поведение, вы можете использовать параметр поиска cutoff=0, который делает total_relation всегда eq.

HTTP JSON параметры поиска

С версии Manticore 5 вы можете устанавливать различные параметры поиска, если используете Manticore через протокол HTTP JSON или любой клиент, основанный на нем.

HTTP JSON вложенные фильтры

JSON-протокол также поддерживает Вложенные фильтры с версии Manticore 5. Ранее вы не могли кодировать такие вещи, как a=1 and (b=2 or c=3) в JSON: must (AND), should (OR) и must_not (NOT) работали только на самом верхнем уровне. Теперь их можно вкладывать.

И многое другое

Вышеизложенное — это лишь часть того, что было сделано с версии Manticore 4.2.0 и теперь стало общедоступным в новом релизе. Пожалуйста, прочитайте о:

🚀 13 основных изменениях
✅ 20+ незначительных изменениях
🐞 45 исправлениях ошибок

в журнале изменений .

Мы надеемся, что вам понравится использовать новую версию Manticore Search. Пожалуйста, поделитесь своим мнением об этом, сделав:

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

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