Сегодня команда 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‑index структурой данных, превосходящей традиционные индексы по объёму в несколько порядков, при этом обеспечивая лучшую производительность запросов и обновлений.
Псевдо‑шардинг по умолчанию
Псевдо‑шардинг, добавленный в предыдущих версиях, был протестирован и оптимизирован и теперь включён по умолчанию. Напомним, псевдо‑шардинг параллелит выполнение поисковых запросов, используя все ядра процессора.
Веб‑интерфейс командной строки
Manticore 5 предоставляет новую точку доступа /cli , позволяющую выполнять SQL‑запросы по HTTP ещё проще.

Режим только для чтения
Новый режим только для чтения позволяет задавать слушатели, которые обрабатывают только запросы на чтение, отбрасывая любые записи. Это может быть полезно, если вы хотите сделать Manticore Search доступным из интернета или из менее защищённой части вашей локальной сети, либо просто убедиться, что приложение, предназначенное только для чтения, не может изменить ваши данные.
Более быстрая загрузка данных
Ранее вы могли отправлять несколько команд записи через HTTP‑протокол JSON, но они обрабатывались по одной; теперь они обрабатываются как одна транзакция. Массовые INSERT/REPLACE/DELETE через JSON по HTTP теперь так же массовы, как через SQL. И даже больше:
Кодирование передачи чанками
Manticore 5 получает поддержку
Chunked transfer encoding
в 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 даже в случаях, не связанных с полнотекстовым поиском, поэтому требование наличия хотя бы одного полнотекстового поля исчезло.
Быстрый доступ к колонным атрибутам
В Manticore 5 мы добавили
Fast fetching
для атрибутов, поддерживаемых
Manticore Columnar Library
: запросы вроде select * from <columnar table> теперь гораздо быстрее, чем раньше, особенно если в схеме много полей.
Неявный cutoff
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 также поддерживает
Nested filters
начиная с 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 исправлений ошибок
в changelog .
Мы надеемся, что вам понравится использовать новую версию Manticore Search. Пожалуйста, поделитесь своим отзывом о ней:
- размещение темы на Community Forum
- создание сообщения об ошибке или запроса функции на GitHub
- обсуждение в Public Slack Chat
- отправка нам письма на [email protected]
