manual/russian/Changelog.md
Выпуск: 30 марта 2026 года
Этот выпуск включает комплексную переработку пакетов, новые параметры API_URL и API_TIMEOUT для автоматического встраивания моделей, гибридный поиск, поддержку резервного копирования и восстановления в S3-совместимых системах, более быструю обслуживание RT таблиц с N-путевыми слияниями и параллельным OPTIMIZE, префильтрацию KNN, а также подготовленные запросы, совместимые с MySQL.
API_URL и API_TIMEOUT для автоматического встраивания моделей. Это затрагивает вас, если вы используете автоматическое встраивание моделей или управляете MCL отдельно от демона, потому что Manticore 25.0.0 требует MCL 13.0.0 и не совместима с более старыми версиями MCL; обновите демон и MCL вместе, и безопасный возврат к предыдущей версии возможен только если вы также восстановите соответствующую более старую версию MCL.bigram_delimiter и режимы bigram_index, учитывающие цифры. Это затрагивает вас, если вы используете эти варианты биграмм или если вы перестраиваете индексы и позже необходимо открыть переписанные индексы с более старой версией Manticore: существующие старые индексы остаются читаемыми, но индексы, перестроенные или впервые записанные в формате 69, не совместимы с более старыми версиями Manticore, поэтому безопасный возврат к предыдущей версии возможен только до того, как такие индексы будут переписаны.model_name: это сохраняет векторы, предоставленные пользователем, предотвращает реплики от перегенерации различных встраиваний, и улучшает производительность автоматического встраивания при использовании с репликацией, но кластеры репликации с смешанными версиями не совместимы при этом изменении. Обновите узлы кластера вместе; безопасный возврат к предыдущей версии возможен только до того, как новый протокол репликации будет использоваться в кластере.hitless_words. Это затрагивает вас, если вы перестраиваете или впервые записываете индексы и позже необходимо открыть их с более старой версией Manticore: существующие старые индексы остаются читаемыми, но любые индексы, перестроенные или впервые записанные в новом формате, не совместимы с более старыми версиями Manticore, поэтому безопасный возврат к предыдущей версии возможен только до того, как такие индексы будут переписаны.manticore теперь является пакетом-сборкой для deb и rpm. Он включает демон, инструменты, конвертер, заголовки для разработки, данные ICU, пакеты зависимостей (manticore-columnar-lib, manticore-backup, manticore-buddy, manticore-executor, manticore-load, manticore-galera и manticore-tzdata, где применимо), а также встроенные языковые пакеты для немецкого, английского и русского языков вместе с поддержкой Jieba. Украинский лемматизатор не включен; установите его отдельно, следуя инструкциям для Debian/Ubuntu или RHEL/CentOS.
При обновлении с предыдущей структуры пакетов обычно можно просто установить пакет manticore. Если старые разделенные пакеты вызывают конфликты, удалите их с помощью apt remove 'manticore*' или yum remove 'manticore*', а затем установите manticore. Эта очистка не удалит ваши существующие данные или конфигурацию.OPTIMIZE, что сокращает время, необходимое для слияния многих дисковых чанков, и представляет новые настройки merge_chunks_per_job и parallel_chunk_merges.fusion_method='rrf'), позволяющий SQL- и JSON-запросам комбинировать полнотекстовые и KNN-результаты, ранжировать их с помощью hybrid_score() и поддерживать несколько KNN-подзапросов в одном объединенном наборе результатов.interactive_timeout и wait_timeout для SQL-соединений, чтобы интерактивные и неинтерактивные клиенты могли использовать разные таймауты простоя, как в MySQL.max_query_time прерывал запросы с операторами такими как NOTNEAR, MAYBE или отрицанием, теперь поиски с тайм-аутом не возвращают строки, которые фактически не удовлетворяют запросу.SHOW STATUS по таблицам оставались согласованными, а внутренние запросы Buddy больше не искажают статистику демона, видимую пользователю.searchd на macOS, теперь SQL-команды через Buddy не падают из-за загрузки старой системной libcurl; поиск библиотеки во время выполнения теперь автоматически предпочитает Homebrew curl, при этом MANTICORE_CURL_LIB доступен для явного переопределения.searchd ссылается на несовместимую libcurl; пакет теперь предпочитает Homebrew curl и поддерживает переопределение MANTICORE_CURL_LIB во время выполнения.UPDATE, когда измененный атрибут должен также отключить свой вторичный индекс, предотвращая некорректные предупреждения и несогласованное состояние вторичного индекса.html_strip=1.float_vector с поддержкой модели, теперь поддерживается явный пустой FROM='', что корректно означает «использовать все текстовые/строковые поля».float_vector, теперь значения MVA сохраняются, а не записываются пустыми.IMPORT TABLE для корректного копирования внешних файлов, включая hitless_words, теперь импортированные таблицы не ссылаются на отсутствующие внешние файлы после импорта.LEFT JOIN, теперь они возвращают правильные значения MySQL NULL вместо строки NULL, улучшая совместимость с нативными клиентами и драйверами MySQL.WHERE title='test'; теперь такие запросы возвращают ошибку вместо сбоя./sql?mode=raw с несколькими выражениями, использующими .@files и последующим SHOW META.ALTER TABLE ... ADD COLUMN для колонок автоэмбеддингов float_vector, теперь model_name и FROM сохраняются корректно, а не заменяются на knn_dims='0'.Resource temporarily unavailable во время обработки запросов.AND, улучшая решения планировщика запросов для пересекающихся полнотекстовых условий.indextool --check при открытии файлов hitless_words дисковых чанков, теперь пути разрешаются относительно директории индекса.LEFT JOIN после сброса RAM-чанков на диск.search_stats_ms_* из-за двойного подсчёта локального времени выполнения; теперь статистика соответствует фактическому времени выполнения запроса.HIGHLIGHT() и генерация сниппетов для текста на CJK, которые добавляли лишние пробелы между словами; теперь выделенные фрагменты сохраняют исходные пробелы текста, а не токенизированные.TRUNCATE TABLE ... WITH RECONFIGURE для RT-таблиц с index_field_lengths=1, особенно при смешении полей и строковых атрибутов; атрибуты длины поля теперь корректно настраиваются при переконфигурации.SELECT t2.i al, (al*0.1) pct ... WHERE pct > 0, которые могли завершаться ошибкой incoming-schema expression missing evaluator; теперь такие фильтры корректно вычисляются после объединения.Выпущена: 7 февраля 2026
Если вы следуете официальному руководству по установке, вам не нужно беспокоиться об этом.
❤️ Мы хотели бы выразить благодарность @pakud за работу над PR #4075.
DROP CACHE. Это обновляет интерфейс между демоном и MCL. Старые версии Manticore Search не поддерживают новую MCL._id и _score как числа вместо строк, соответствуя обычному поиску; это критическое изменение для клиентов, которые зависели от типа строки для этих полей.CREATE TABLE (значения, разделенные семиколоном; wordforms/исключения используют > или => для пар, с экранированием \), поэтому таблицы могут создаваться без внешних файлов; SHOW CREATE TABLE возвращает эти внутренние значения.SELECT * с KNN на колонковых таблицах.--quiet (-q) для подавления выходных данных запуска (баннера и сообщений предварительной загрузки), выводя только ошибки; полезно при запуске и остановке searchd в цикле или из скриптов.Keep-Alive, уменьшая случайные сбои соединений в API клиентах (например, PHP, Go). Чтобы закрыть соединение, клиент отправляет Connection: close. HTTP/1.0 все еще требует Connection: keep-alive для постоянности.j.s), которые не возвращали совпадений; теперь они работают как JOIN по обычным строковым атрибутам.REPLACE INTO, а также для INSERT INTO, поэтому таблицы создаются по требованию при их отсутствии.GROUP BY для колоночных MVA с несколькими столбцами GROUP BY, отклоняя такие запросы с той же ошибкой, что и для построчных ("MVA values can't be used in multiple group-by").highlight() с html_strip_mode=strip, которая портила содержимое, декодируя сущности и изменяя теги; исходная форма сущностей теперь сохраняется в выделенном выводе.ALTER TABLE REBUILD SECONDARY с ошибкой failed to rename … .tmp.spjidx, когда таблица имела несколько дисковых чанков.ATTACH TABLE теперь мигрирует эти файлы в новый чанковый формат и обновляет заголовки дисковых чанков, поэтому после ALTER TABLE RENAME демон больше не сообщает об отсутствующих внешних файлах при перезапуске.(@name ="^New York$") | (@ascii_name ="^New York$")), который возвращал совпадения из других полей; булево упрощение больше не снимает ограничения полей в этом случае.ALTER TABLE с настройками уровня таблицы (например, html_strip='1') на таблицах с авто-эмбеддингами с ошибкой "knn_dims can't be used together with model_name"; сериализация теперь опускает knn_dims, когда установлен model_name.HIGHLIGHT и генерация сниппетов теперь поддерживают REGEX в строке запроса, поэтому совпадения REGEX корректно выделяются, когда тот же запрос REGEX используется в MATCH и HIGHLIGHT.HISTOGRAM(), возвращавшая некорректные значения (например, ноль), когда первый аргумент является выражением с плавающей точкой, таким как price*100; гистограмма теперь использует бакетирование с плавающей точкой для аргументов типа float, поэтому результаты выражений группируются правильно.HIGHLIGHT() и генерация сниппетов теперь поддерживают явный оператор OR (|) внутри выражений в кавычках, используя то же преобразование запроса, что и поиск.DROP CACHE для очистки кэшей запросов, docstore, skip и вторичных индексов.ORDER BY включал строковый столбец: токен scroll теперь применяется корректно и возвращает следующую страницу вместо повторения первой.WHERE; ранее в некоторых случаях (например, когда правая таблица не имела полнотекстового поля) запрос выполнялся без ошибки и возвращал пустой набор результатов.CREATE TABLE и в выражениях, поэтому таблицы и запросы могут использовать зарезервированные слова в качестве идентификаторов при экранировании обратными кавычками.SHOW CREATE TABLE теперь выводит имена столбцов, которые являются зарезервированными или специальными (например, knn), в обратных кавычках, чтобы CREATE TABLE ... LIKE и повторное выполнение показанного DDL работали, когда исходная таблица имеет такие столбцы.ALTER, чтобы переименование несуществующего .spds больше не происходило, и сохранены существующие данные blob в пуле blob при добавлении колоночных атрибутов, чтобы ошибки "Blob offset out of bounds" и сбои запросов/слияний больше не возникали.0000000000), создавая недопустимый JSON; строковые атрибуты теперь всегда сериализуются как строки JSON в кавычках.searchd.attr_autoconv_strict (по умолчанию 0) для управления преобразованием строк в числа при INSERT/REPLACE в RT-таблицы: при включении недопустимые значения (пустая строка, нечисловые, завершающие символы, переполнение) возвращают ошибки вместо тихого преобразования в 0.must_not в JSON-поиске, чтобы он вел себя как логическое НЕ (возвращая все документы, которые не соответствуют внутреннему запросу); также исправлен WHERE NOT ... в SphinxQL для выражений-фильтров.libstemmer_el) #204, предотвращая сбой сервера, который мог происходить с определенным греческим текстом при использовании morphology='libstemmer_el' (см. issue #2888).LazyNetEvents_c::EventTick().CREATE TABLE, поэтому любое именование может использоваться при определении таблиц (например, CREATE TABLE t (id bigint, tags mva64, ...) type='pq'). Вывод схемы (например, DESC table) продолжает использовать существующие имена типов для совместимости.ALTER CLUSTER ... ADD TABLE выполнялся на другом узле после того, как присоединитель перезапустился и повторно присоединился.NOTNEAR, чтобы он корректно исключал совпадения, когда правый термин появляется в пределах указанного расстояния либо до, либо после левого термина (симметричное/обратное сопоставление). Ранее NOTNEAR рассматривал правый термин только тогда, когда он появлялся после левого термина, поэтому, например, d NOTNEAR/3 a мог некорректно соответствовать документу, содержащему "a b c d". NEAR теперь также возвращает ошибку, когда расстояние равно 0.OPTION fuzzy=1), за которыми следует show meta на /cli и /sql?mode=raw.Выпущена: 7 декабря 2025 г.
Если вы следуете официальному руководству по установке, вам не нужно об этом беспокоиться.
Content-Type, так что /metrics теперь возвращает текст в формате Prometheus (text/plain; version=0.0.4) вместо JSON, исправляя сбои при сборе метрик.LOCK TABLES / UNLOCK TABLES: блокировки на запись теперь возвращают предупреждения вместо ошибок, блокировки на чтение корректно отображаются в SHOW LOCKS, и общая логика блокировок ведёт себя последовательно.JOIN ON (не только сравнений на равенство), что позволяет выполнять запросы вида ... ON t1.id = t2.t1_id AND t2.value = 5./sql от демона некорректно использовали заголовок Content-Type: text/html вместо application/json.GROUP BY / FACET по атрибутам, созданным с помощью JSON-to-attribute mapping, не работала./sql и включает другие исправления для нечеткого поиска./cli_json, содержащие точку с запятой (например, объединение SQL-запросов), не выполнялись — теперь точки с запятой не заменяются на нулевые символы перед обработкой.persistent_connections_limit.query_time_1min) фактически показывали миллисекунды вместо секунд.SHOW INDEX <name> STATUS (search_stats_ms_*) не совпадала со значениями из логов запросов; теперь отображаются реальные зарегистрированные времена.application/json.binlog.cpp, теперь DoSaveMeta() корректно компилируется для Windows.MATCH(), теперь пустые группы, например (), не вызывают ошибку (например, запросы вида camera() теперь работают корректно).--skip-lock-tables при дампе реплицируемых таблиц и исправлены несколько повреждённых ссылок в руководстве.LOCK/UNLOCK TABLES (теперь это обрабатывает демон), а также исправлен разбор автодополнения, чтобы запросы с экранированными кавычками (например, \" или \') обрабатывались корректно, без ошибок.knn_dist() в пользовательском ранжировщике с запросами KNN+MATCH; теперь такие запросы возвращают понятную ошибку вместо сбоя.Выпущено: 7 ноября 2025 г.
❤️ Мы хотим искренне поблагодарить @ricardopintottrdata за их работу над PR #3792 и PR #3828 — решение проблем с подсчетами HAVING total и ошибкой filter with empty name — а также @jdelStrother за их вклад с PR #3819, который улучшает обработку ParseCJKSegmentation, когда поддержка Jieba недоступна.
Ваши усилия помогают сделать проект сильнее — большое спасибо!
Если вы следуете официальному руководству по установке, вам не о чем беспокоиться.
Версия v14.0.0 обновляет протокол репликации. Если вы работаете с кластером репликации, вам нужно:
--new-cluster, используя инструмент manticore_new_cluster в Linux.LOCK TABLES, генерируемых mysqldump, что улучшает безопасность логических бэкапов.max(ft field)."(abc|def)" не работал как ожидалось.HAVING.CALL SUGGEST не сопоставлял триграммы.ParseCJKSegmentation, когда поддержка Jieba недоступна.Выпущена: 7 октября 2025
Если вы следуете официальному руководству по установке, вам не нужно об этом беспокоиться.
Поскольку конфигурационный файл был обновлен, во время обновления на Linux вы можете увидеть предупреждение с вопросом, сохранить ли вашу версию или использовать новую из пакета. Если у вас есть пользовательская (не по умолчанию) конфигурация, рекомендуется сохранить вашу версию и обновить путь pid_file на /run/manticore/searchd.pid. Однако, даже если вы не измените путь, все должно работать нормально.
/var/run/manticore на правильный /run/manticore в конфигурации. Поскольку конфигурационный файл был обновлен, во время обновления вы можете увидеть предупреждение с вопросом, сохранить ли вашу версию или использовать новую из пакета. Если у вас есть пользовательская (не по умолчанию) конфигурация, рекомендуется сохранить вашу версию и обновить путь pid_file на /run/manticore/searchd.pid.Выпущена: 13 сентября 2025
Выпущена: 13 сентября 2025
Главной особенностью этого релиза является Auto Embeddings — новая функция, которая делает семантический поиск таким же простым, как SQL. Не требуются внешние сервисы или сложные пайплайны: просто вставьте текст и производите поиск на естественном языке.
Если вы следуете официальному руководству по установке, вам не о чем беспокоиться.
Рекомендуемая версия MCL: 8.0.1 Рекомендуемая версия Buddy: 3.34.2
/run.boolean_simplify в конфигурации.alter table <table> modify column <column> api_key=<key>./sql больше нельзя использовать команду SHOW VERSION.Выпущена: 8 августа 2025 года
Рекомендуемая версия MCL: 8.0.1
Рекомендуемая версия Buddy: 3.34.2
Если вы следуете официальному руководству по установке, беспокоиться не о чем.
Выпущено: 8 июля 2025
@@collation_database, вызывавшая несовместимость с некоторыми версиями mysqldumpSHOW THREADS для отображения загрузки CPU в виде целого числаdist/test_kit_docker_build.sh, из-за которой отсутствовал коммит BuddyВыпущена: 9 июня 2025
Эта версия представляет обновление с новыми возможностями, одним изменением, нарушающим обратную совместимость, и многочисленными улучшениями стабильности и исправлениями ошибок. Изменения направлены на расширение возможностей мониторинга, улучшение функций поиска и исправление различных критических проблем, влияющих на стабильность и производительность системы.
Начиная с версии 10.1.0, поддержка CentOS 7 больше не осуществляется. Пользователям рекомендуется перейти на поддерживаемую операционную систему.
layouts='' по умолчанию для нечеткого поискаseqno для более быстрого перезапуска узла после сбоя@@variables всегда возвращали 0SELECT ... FUZZY=0 не всегда отключал нечёткий поиск_random в JSON APIid != value%20 и +)json.field в фасетном поискеDELETE FROM на TRUNCATE для распределённых таблицgeodist() с JSON-атрибутамиВыпущена: 2 мая 2025 года
Этот релиз включает множество исправлений ошибок и улучшений стабильности, лучшее отслеживание использования таблиц и улучшения управления памятью и ресурсами.
❤️ Особая благодарность @cho-m за исправление совместимости сборки с Boost 1.88.0 и @benwills за улучшение документации по stored_only_fields.
🪲 v9.3.2 Исправлена проблема, при которой в столбце "Show Threads" активность ЦП отображалась в виде числа с плавающей точкой вместо строки; также исправлена ошибка разбора набора результатов PyMySQL, вызванная неправильным типом данных.
🪲 v9.3.1 Issue #3343 Исправлено оставшиеся файлы tmp.spidx, когда процесс оптимизации был прерван.
🆕 v9.3.0 PR #3337 Добавлен счетчик команд по каждой таблице и подробная статистика использования таблиц.
🪲 v9.2.39 Issue #3236 Исправление: предотвращение повреждения таблиц путем удаления сложных обновлений чанков. Использование wait-функций внутри последовательного воркера нарушало последовательную обработку, что могло повредить таблицы. Реализован заново автосброс. Удалена внешняя очередь опроса для избежания ненужных блокировок таблиц. Добавлено условие "малой таблицы": если количество документов ниже 'малого лимита таблицы' (8192) и не используется Вторичный индекс (SI), сброс пропускается.
🪲 v9.2.38 Исправление: пропуск создания Вторичного индекса (SI) для фильтров, использующих ALL/ANY на списках строк, без влияния на атрибуты JSON.
🪲 v9.2.37 Issue #2898 Добавлена поддержка обратных кавычек для системных таблиц.
🪲 v9.2.36 Исправление: использование заполнителя для операций с кластерами в устаревшем коде. В парсере теперь явно разделяются поля для имен таблиц и кластеров.
🪲 v9.2.35 Исправление: сбой при удалении кавычек с одиночной '.
🪲 v9.2.34 Issue #3090 Исправление: обработка больших идентификаторов документов (ранее могла не находить их).
🪲 v9.2.33 Исправление: использование беззнаковых целых чисел для размеров битовых векторов.
🪲 v9.2.32 Исправление: снижение пикового использования памяти при слиянии. Поиск соответствия docid-коду строки теперь использует 12 байт на документ вместо 16 байт. Например: 24 ГБ ОЗУ для 2 миллиардов документов вместо 36 ГБ.
🪲 v9.2.31 Issue #3238 Исправление: неправильное значение COUNT(*) в больших таблицах реального времени.
🪲 v9.2.30 Исправление: неопределенное поведение при обнулении строковых атрибутов.
🪲 v9.2.29 Небольшое исправление: улучшен текст предупреждения.
🪲 v9.2.28 Issue #3290 Улучшение: усовершенствован indextool --buildidf
🪲 v9.2.27 Issue #3032 С интеграцией Kafka теперь можно создавать источник для конкретного раздела Kafka.
🪲 v9.2.26 Issue #3301 Исправление: ORDER BY и WHERE по id могли вызвать ошибки OOM (Out Of Memory).
🪲 v9.2.25 Issue #3171 Исправление: сбой из-за ошибки сегментации при использовании grouper с несколькими JSON-атрибутами в RT таблице с несколькими дисковыми чанками
🪲 v9.2.24 Issue #3246 Исправление: запросы WHERE string ANY(...) не срабатывали после сброса RAM-чанка.
🪲 v9.2.23 PR #518 Небольшие улучшения синтаксиса авто-шардинга.
🪲 v9.2.22 Issue #2763 Исправление: глобальный idf-файл не загружался при использовании ALTER TABLE.
🪲 v9.2.21 Исправление: глобальные idf-файлы могут быть большими. Теперь мы раньше освобождаем таблицы, чтобы избежать удержания ненужных ресурсов.
🪲 v9.2.20 PR #3277 Улучшение: лучшая проверка опций шардинга.
🪲 v9.2.19 PR #3275 Исправление: совместимость сборки с Boost 1.88.0.
🪲 v9.2.18 Issue #3228 Исправление: сбой при создании распределенной таблицы (ошибка с недопустимым указателем).
🪲 v9.2.17 PR #3272 Исправление: проблема с многострочным нечетким FACET.
🪲 v9.2.16 Issue #3063 Исправление: ошибка в расчете расстояния при использовании функции GEODIST.
🪲 v9.2.15 Issue #3027 Незначительное улучшение: поддержка формата фильтра query_string от Elastic.
Выпущена: 28 марта 2025
--mockstack для расчета требований к стеку рекурсивных операций. Новый режим --mockstack анализирует и сообщает о необходимых размерах стека для рекурсивной оценки выражений, операций сопоставления с образцом, обработки фильтров. Рассчитанные требования к стеку выводятся в консоль для целей отладки и оптимизации.searchd.kibana_version_string, которая может быть полезна при использовании Manticore с определенными версиями Kibana или OpenSearch Dashboards, которые ожидают конкретную версию Elasticsearch._id на id в некоторых HTTP JSON ответах для единообразия. Убедитесь, что обновили ваше приложение соответствующим образом.server_id при присоединении к кластеру, чтобы гарантировать уникальность ID каждого узла. Операция JOIN CLUSTER теперь может завершиться ошибкой с сообщением о дублировании server_id, когда присоединяющийся узел имеет тот же server_id, что и существующий узел в кластере. Чтобы решить эту проблему, убедитесь, что каждый узел в репликационном кластере имеет уникальный server_id. Вы можете изменить значение по умолчанию для server_id в разделе "searchd" вашего конфигурационного файла на уникальное значение перед попыткой присоединения к кластеру. Это изменение обновляет протокол репликации. Если вы используете репликационный кластер, вам необходимо:
--new-cluster, используя инструмент manticore_new_cluster в Linux.serializer, корректно восстанавливаются.ORDER BY.lower_bound с const knn::DocDist_t*&. ❤️ Спасибо @Azq2 за PR.ALTER: векторы с плавающей точкой теперь сохраняют свои исходные размерности, и KNN индексы теперь корректно генерируются.fuzzy=1 не могла использоваться с ranker или field_weights.SET GLOBAL timezone не имел эффекта.UPDATE теперь корректно учитывают настройку query_log_min_msec.JOIN CLUSTER.Выпущена: 28 февраля 2025
avg() в запросе SELECT ... JOIN могло приводить к некорректным результатам; теперь исправлено.IN(...) мог возвращать некорректные результаты.max_iops / max_iosize в версии 7.0.0 могла ухудшать производительность индексирования; теперь исправлено.diskchunk_flush_write_timeout=-1 для каждой таблицы не отключала сброс индекса; теперь исправлено.NOT и ранжировщиком выражений.Выпущена: 30 января 2025 г.
global_idf в RT таблицах. Требуется пересоздание таблицы.cjk набора символов. Обновите определения вашего набора символов соответственно: если у вас cjk,non_cjk и тайские символы важны для вас, измените его на cjk,thai,non_cjk, или cont,non_cjk, где cont — это новое обозначение для всех языков с непрерывным письмом (т.е. cjk + thai). Измените существующие таблицы с помощью ALTER TABLE.Name на Variable name для PQ SHOW META.create table / alter table. Вам необходимо выполнить чистое завершение работы экземпляра Manticore перед обновлением до новой версии.--new-cluster, используя инструмент manticore_new_cluster в Linux.ALTER CLUSTER ADD и DROP. Это изменение также затрагивает протокол репликации. Обратитесь к предыдущему разделу за рекомендациями по обработке этого обновления.COUNT(DISTINCT) для ORDER BY в FACET и GROUP BY.Content-Encoding: gzip.SHOW LOCKS.mysqldump для реплицированных таблиц.CREATE TABLE и ALTER TABLE.index на table в запросах и ответах.distinct в результаты агрегации конечной точки HTTP /sql.uuid_short в списке выбора.manticore-buddy.searchd.CALL uuid_short для генерации последовательностей с несколькими значениями uuid_short.GROUP BY в SphinxQL.fixed_interval в запросах Kibana, связанных с датами.searchd в не-отладочном режиме.json.string в правой таблице на соединении таблиц.null для всех значений в любых POST HTTP JSON конечных точках (вставка/замена/пакет). В этом случае используется значение по умолчанию._update.thread_stack.unattended-upgrades.CREATE TABLE и ALTER TABLE. ❤️ Спасибо, @subnix за PR.OPTIMIZE теперь выдает ошибку, когда таблица заморожена.searchd зависал при остановке после FREEZE и FLUSH RAMCHUNK.FACET с более чем 5 полями сортировки.mysqldump с включенным index_field_lengths.ALTER TABLE.FACET; установлен порядок сортировки по умолчанию на DESC для FACET с COUNT(*)./sql и /sql?mode=raw; сделаны запросы из этих конечных точек последовательными без необходимости заголовка query=.OR с KNN поиском.indextool --mergeidf *.idf --out global.idf удаляет выходной файл после создания.ORDER BY строкой во внешнем выборе.lemmatize_xxx_all увеличивают hitpos последующих токенов.ALTER ... ADD COLUMN ... TEXT.SELECT, пока таблица не будет разморожена._bulk._bulk.SELECT.ALL или ANY в выражении IN не является JSON-атрибутом.libstemmer. ❤️ Спасибо, @subnix за PR.CREATE TABLE IF NOT EXISTS ... WITH DATA, когда таблица уже существует.REPLACE INTO cluster_name:table_name.--network=host.Выпущена: 22 ноября 2024
Версия 6.3.8 продолжает серию 6.3 и включает только исправления ошибок.
threads или max_threads_per_query.Выпущен: 7 октября 2024
unattended-upgrades, которая автоматически устанавливает обновления пакетов на системах на базе Debian, неверно помечала несколько пакетов Manticore, включая manticore-galera, manticore-executor и manticore-columnar-lib, для удаления. Это произошло из-за того, что dpkg ошибочно считал виртуальный пакет manticore-extra избыточным. Были внесены изменения, чтобы гарантировать, что unattended-upgrades больше не пытается удалить важные компоненты Manticore.Выпущена: 2 августа 2024
Версия 6.3.6 продолжает серию 6.3 и включает только исправления ошибок.
max_query_time, при запросе нескольких индексов.Выпущена: 31 июля 2024
Версия 6.3.4 продолжает серию 6.3 и включает только незначительные улучшения и исправления ошибок.
hitless_words.manticore.json, а не проверять весь размер каталога данных.Выпущена: 26 июня 2024
Версия 6.3.2 продолжает серию 6.3 и включает несколько исправлений ошибок, некоторые из которых были обнаружены после выпуска 6.3.0.
local_df.count(*) без GROUP BY.ALTER TABLE не учитывало параметры KNN.manticore-tools Redhat версии 6.3.0.CALL KEYWORDS для RT индекса с дисковыми чанками./cli.drop table if exists t; create table t через /cli.cluster:name в HTTP-эндпоинте /_bulk.Выпущено: 23 мая 2024 года
.spa (скалярные атрибуты): 256KB -> 8MB; .spb (блоб-атрибуты): 256KB -> 8MB; .spc (колоночные атрибуты): 1MB, без изменений; .spds (docstore): 256KB -> 8MB; .spidx (вторичные индексы): 256KB буфер -> 128MB лимит памяти; .spi (словарь): 256KB -> 16MB; .spd (списки документов): 8MB, без изменений; .spp (списки попаданий): 8MB, без изменений; .spe (списки пропусков): 256KB -> 8MB.libgalera_smm.so из MySQL 5.x)._rate на _rps.index на table в сообщениях об ошибках; исправлено сообщение об ошибке парсера bison.manticore.tbl в качестве имени таблицы.agent_connect_timeout и agent_query_timeout) для оператора create distributed table.searchd.expansion_limit.SHOW STATUS.@@system.sessions./sql для упрощения интеграции с библиотеками.CALL PQ с большими пакетами.log_level=debug.DEBUG DEDUP для чанков таблицы реального времени, которые могут содержать дублирующиеся записи после присоединения обычной таблицы, содержащей дубликаты.@timestamp как временной метки.RuntimeDirectory.local_df теперь по умолчанию. Улучшен протокол поиска мастер-агент (версия обновлена). Если вы запускаете Manticore Search в распределенной среде с несколькими экземплярами, сначала обновите агентов, затем мастеров.--new-cluster, используя инструмент manticore_new_cluster в Linux./json/* были устаревшими.plugin_dir./search.charset_table не работало в некоторых случаях.gcache.page_size для кластеров репликации без таблиц или с пустыми таблицами; также исправлено сохранение и загрузка параметров Galera.searchd.agent_*, но с другими значениями по умолчанию.show variables.count distinct, которая могла приводить к сбою.index_token_filter.debugv.index_exact_words между индексированием и загрузкой таблицы в демон.=term в полнотекстовом запросе с использованием поля morphology_skip_fields.data_dir, влияющих на текущий рабочий каталог при старте демона.agent_query_timeout для таблицы на значение параметра по умолчанию agent_query_timeout.packedfactors() с несколькими значениями на совпадение.min_prefix_len / min_infix_len.SPH_EXTNODE_STACK_SIZE.FACET при запросе к распределённой таблице с агентными и локальными таблицами.WHERE json.array IN (<value>)./cli.CREATE TABLE не выдавал ошибку в случае отсутствия файла wordforms.SPH_SORT_ATTR_DESC и SPH_SORT_ATTR_ASC.Expect: 100-continue для curl-запросов к Buddy./search.ALTER CLUSTER ADD и JOIN CLUSTER для ожидания друг друга, что предотвращает состояние гонки, когда ALTER добавляет таблицу в кластер, пока узел-донора отправляет таблицы узлу-присоединителю./pq/{table}/*.UNFREEZE не работал в некоторых случаях./cli_json.signal 11 при вставке данных.FREEZE для избежания проблем с freeze/unfreeze.max_query_time в некоторых случаях не работал.SecondaryIndex.expansion_limit для разбиения конечного набора результатов ключевых слов вызова из нескольких дисковых или RAM чанков.alter не выполнялся, когда путь data_dir находился на символической ссылке.--forcetmp.spidx.HAVING.expr при использовании колоночного атрибута.manticore.conf.sh.Выпущена: 23 августа 2023 года
Версия 6.2.12 продолжает серию 6.2 и устраняет проблемы, обнаруженные после выпуска 6.2.0.
TimeoutStartSec с infinity на 0 для лучшей совместимости с Centos 7.searchdreplication.cpp: beggining -> beginning.Thd_t на Windows, связанная с ограничениями атомарного копирования.ColumnarScan.AF_INET в тесте./bulk в руководстве.Выпущено: 4 августа 2023 года
mysqldumppseudo_sharding был скорректирован, чтобы ограничиваться количеством свободных потоков. Это обновление значительно повышает производительность пропускной способности./json/pq.upper() и lower().count(*) теперь возвращается предварительно рассчитанное значение.SELECT для выполнения произвольных вычислений и отображения @@sysvars. В отличие от прошлого, вы больше не ограничены только одним вычислением. Поэтому запросы вида select user(), database(), @@version_comment, version(), 1+1 as a limit 10 будут возвращать все столбцы. Обратите внимание, что опциональный 'limit' всегда будет игнорироваться.CREATE DATABASE.ALTER TABLE table REBUILD SECONDARY вторичные индексы теперь всегда перестраиваются, даже если атрибуты не обновлялись.SELECT DATABASE(). Однако она всегда будет возвращать Manticore. Это дополнение имеет решающее значение для интеграции с различными инструментами MySQL./cli_json, который функционирует как прежний /cli.thread_stack теперь можно изменять во время выполнения с помощью оператора SET. Доступны как сессионные, так и общесистемные (для демона) варианты. Текущие значения можно увидеть в выводе show variables.SHOW STATUS.DESC и SHOW CREATE TABLE теперь соответствует порядку в SELECT * FROM.P01) при различных ошибках. Это улучшение помогает определить, какой парсер вызвал ошибку, а также скрывает несущественные внутренние детали.sentence для отображения всего предложения.strftime()./bulk сообщает информацию о количестве обработанных и необработанных строк (документов) в случае ошибки.CREATE TABLE.Get, заменяя предыдущие двухэтапные вызовы AdvanceTo + Get для получения значения.CheckReplaceEntry был удалён из группового сортировщика для ускорения расчёта агрегатных функций.CREATE TABLE read_buffer_docs и read_buffer_hits теперь поддерживают синтаксис k/m/g.apt/yum install manticore-language-packs. В macOS используйте команду brew install manticoresoftware/tap/manticore-language-packs.SHOW CREATE TABLE и DESC.INSERT недостаточно места на диске, новые запросы INSERT будут завершаться ошибкой, пока не станет доступно достаточно места./bulk теперь обрабатывает пустые строки как команду commit. Подробнее здесь.count(*) используется с одним фильтром, запросы теперь используют предварительно рассчитанные данные из вторичных индексов, когда они доступны, что значительно ускоряет время выполнения запросов./*+ SecondaryIndex(uid) */. Обратите внимание, что старый синтаксис больше не поддерживается.@ в именах таблиц было запрещено для предотвращения конфликтов синтаксиса.indexed и attribute, теперь рассматриваются как одно поле во время операций INSERT, DESC и ALTER.manticore.json..sph могли быть повреждены ALTER. Исправлено.pre_commit, возникающую при репликации замены с нескольких мастер-узлов.pseudo_sharding был отключен.show index status, был изменен и теперь варьируется в зависимости от типа используемого индекса.expand_keywords.SNIPPETS().not_terms_only_allowed к RT индексу с убитыми документами.FEDERATED с агрегатом.rt_attr_json был несовместим с колоннарным хранилищем.ignore_chars.--dumpdocids.morphology_skip_fields.max_packet_size для команд репликации между узлами. Кроме того, последняя ошибка кластера была добавлена в отображение статуса.MANTICORE_BUDDY_TIMEOUT (по умолчанию 3 секунды) для управления временем ожидания демона для сообщения buddy при запуске.SHOW CREATE TABLE.SNIPPET().all()/any() записывается в журнал.Выпущено: 15 марта 2023
/pq, чтобы он был псевдонимом для HTTP-эндпоинта /json/pq.Выпущено: 10 февраля 2023
Выпущено: 7 февраля 2023
Начиная с этого выпуска, Manticore Search поставляется с Manticore Buddy, демоном-сайдкаром, написанным на PHP, который обрабатывает высокоуровневую функциональность, не требующую супернизкой задержки или высокой пропускной способности. Manticore Buddy работает за кулисами, и вы можете даже не осознавать, что он работает. Хотя он невидим для конечного пользователя, это была значительная задача сделать Manticore Buddy легко устанавливаемым и совместимым с основным демоном на C++. Это главное изменение позволит команде разрабатывать широкий спектр новых высокоуровневых функций, таких как оркестрация шардов, контроль доступа и аутентификация, а также различные интеграции, такие как mysqldump, DBeaver, Grafana mysql connector. На данный момент он уже обрабатывает SHOW QUERIES, BACKUP и Авто-схему.
Этот выпуск также включает более 130 исправлений ошибок и множество функций, многие из которых можно считать основными.
SET GLOBAL ES_COMPAT=off.manticore-backup для резервного копирования и восстановления экземпляра ManticoreKILL для завершения длительного SELECT.max_matches для агрегирующих запросов для повышения точности и снижения времени отклика.Проблема #822 SQL команды FREEZE/UNFREEZE для подготовки реального/обычного таблицы к резервному копированию.
Коммит c470 Новые настройки accurate_aggregation и max_matches_increase_threshold для контролируемой точности агрегации.
Проблема #718 Поддержка подписанных отрицательных 64-битных идентификаторов. Обратите внимание, что вы все еще не можете использовать идентификаторы > 2^63, но теперь вы можете использовать идентификаторы в диапазоне от -2^63 до 0.
Поскольку мы недавно добавили поддержку вторичных индексов, ситуация стала запутанной, так как "индекс" может относиться к вторичному индексу, полнотекстовому индексу или обычному/реальному индексу. Чтобы уменьшить путаницу, мы переименовываем последний в "таблицу". Следующие SQL/командные строки подвержены этому изменению. Их старые версии устарели, но все еще функциональны:
index <table name> => table <table name>,searchd -i / --index => searchd -t / --table,SHOW INDEX STATUS => SHOW TABLE STATUS,SHOW INDEX SETTINGS => SHOW TABLE SETTINGS,FLUSH RTINDEX => FLUSH TABLE,OPTIMIZE INDEX => OPTIMIZE TABLE,ATTACH TABLE plain TO RTINDEX rt => ATTACH TABLE plain TO TABLE rt,RELOAD INDEX => RELOAD TABLE,RELOAD INDEXES => RELOAD TABLES.Мы не планируем делать старые формы устаревшими, но для обеспечения совместимости с документацией мы рекомендуем изменить названия в вашем приложении. Что будет изменено в будущем релизе, так это переименование "index" в "table" в выводе различных SQL и JSON команд.
Запросы с состоянием UDF теперь вынуждены выполняться в одном потоке.
Проблема #1011 Рефакторинг всего, что связано с планированием времени, как предварительное условие для параллельного объединения чанков.
⚠️ СЛОМАННОЕ ИЗМЕНЕНИЕ: Формат хранения столбцов был изменен. Вам нужно перестроить те таблицы, которые имеют столбцовые атрибуты.
⚠️ СЛОМАННОЕ ИЗМЕНЕНИЕ: Формат файла вторичных индексов был изменен, поэтому если вы используете вторичные индексы для поиска и у вас в конфигурационном файле указано searchd.secondary_indexes = 1, имейте в виду, что новая версия Manticore пропустит загрузку таблиц, которые имеют вторичные индексы. Рекомендуется:
searchd.secondary_indexes на 0 в конфигурационном файле.ALTER TABLE <имя таблицы> REBUILD SECONDARY для каждого индекса, чтобы перестроить вторичные индексы.Если вы запускаете кластер репликации, вам нужно будет выполнить ALTER TABLE <имя таблицы> REBUILD SECONDARY на всех узлах или следовать этой инструкции с единственным изменением: выполните ALTER .. REBUILD SECONDARY вместо OPTIMIZE.
⚠️ СЛОМАННОЕ ИЗМЕНЕНИЕ: Версия binlog была обновлена, поэтому любые binlog из предыдущих версий не будут воспроизведены. Важно убедиться, что Manticore Search остановлен корректно в процессе обновления. Это означает, что в /var/lib/manticore/binlog/ не должно быть файлов binlog, кроме binlog.meta, после остановки предыдущего экземпляра.
Проблема #849 SHOW SETTINGS: теперь вы можете видеть настройки из конфигурационного файла изнутри Manticore.
Проблема #1007 SET GLOBAL CPUSTATS=1/0 включает/выключает отслеживание времени процессора; SHOW THREADS теперь не показывает статистику CPU, когда отслеживание времени процессора выключено.
Проблема #1009 Сегменты RAM чанков RT таблицы теперь могут быть объединены во время сброса RAM чанка.
Проблема #1012 Добавлен прогресс вторичного индекса в вывод indexer.
Проблема #1013 Ранее запись таблицы могла быть удалена Manticore из списка индексов, если она не могла начать обслуживать ее при запуске. Новое поведение заключается в том, чтобы оставить ее в списке, чтобы попытаться загрузить ее при следующем запуске.
indextool --docextract возвращает все слова и попадания, принадлежащие запрашиваемому документу.
Коммит 2b29 Переменная окружения dump_corrupt_meta включает дамп поврежденных метаданных таблицы в журнал в случае, если searchd не может загрузить индекс.
Коммит c7a3 DEBUG META может показать max_matches и статистику псевдо-шардинга.
Коммит 6bca Лучше ошибка вместо запутанного "Формат заголовка индекса не json, попробую как бинарный...".
Коммит bef3 Путь украинского лемматизатора был изменен.
Коммит 4ae7 Статистика вторичных индексов была добавлена в SHOW META.
Коммит 2e7c JSON интерфейс теперь можно легко визуализировать с помощью Swagger Editor https://manual.manticoresearch.com/Openapi#OpenAPI-specification.
⚠️ СЛОМАННОЕ ИЗМЕНЕНИЕ: Протокол репликации был изменен. Если вы запускаете кластер репликации, то при обновлении до Manticore 5 вам нужно:
--new-cluster (запустите инструмент manticore_new_cluster в Linux).select attr, count(*) from plain_index (без фильтрации), теперь быстрее, если вы используете MCL.brew install manticoresoftware/manticore/manticoresearch manticoresoftware/manticore/manticore-extra.textbinlog_flush = 1 был сломан все время с Sphinx. Исправлено.got exception while reading ist stream: mkstemp(./gmb_pF6TJi) failed: 13 (Permission denied), если searchd был запущен из каталога, в который он не может записывать.Выпущена: 30 мая 2022
Выпущена: 18 мая 2022
🔬 Поддержка Manticore Columnar Library 1.15.2, которая включает бета-версию вторичных индексов. Построение вторичных индексов включено по умолчанию для колоночных и построчных индексов (как обычных, так и реального времени), если используется Manticore Columnar Library, но для их использования при поиске необходимо установить secondary_indexes = 1 либо в конфигурационном файле, либо с помощью SET GLOBAL. Новая функциональность поддерживается во всех операционных системах, кроме старых Debian Stretch и Ubuntu Xenial.
Режим только для чтения: теперь можно указать слушателей, которые обрабатывают только запросы на чтение, игнорируя любые операции записи.
Новый эндпоинт /cli для ещё более простого выполнения SQL-запросов через HTTP.
Более быстрые массовые INSERT/REPLACE/DELETE через JSON по HTTP: ранее можно было передавать несколько команд записи через протокол HTTP JSON, но они обрабатывались по одной, теперь они обрабатываются как единая транзакция.
#720 Поддержка вложенных фильтров в протоколе JSON. Ранее нельзя было закодировать такие конструкции, как a=1 and (b=2 or c=3) в JSON: must (И), should (ИЛИ) и must_not (НЕ) работали только на верхнем уровне. Теперь их можно вкладывать.
Поддержка Chunked transfer encoding в протоколе HTTP. Теперь вы можете использовать chunked transfer в своём приложении для передачи больших пакетов с уменьшенным потреблением ресурсов (поскольку вычисление Content-Length не требуется). На стороне сервера Manticore теперь всегда обрабатывает входящие HTTP-данные в потоковом режиме, не дожидаясь передачи всего пакета, как раньше, что:
max_packet_size (128 МБ), например, 1 ГБ за раз.#719 Поддержка 100 Continue в HTTP-интерфейсе: теперь можно передавать большие пакеты из curl (включая библиотеки curl, используемые различными языками программирования), который по умолчанию отправляет Expect: 100-continue и ждёт некоторое время перед фактической отправкой пакета. Ранее приходилось добавлять заголовок Expect: , теперь в этом нет необходимости.
Раньше (обратите внимание на время отклика):
$ time curl -v -sX POST http://localhost:9318/bulk -H "Content-Type: application/x-ndjson" --data '{"insert": {"index": "user", "doc": {"name":"Prof. Matt Heaney IV","email":"[email protected]","description":"Tempora ullam eaque consequatur. Vero aut minima ut et ut omnis officiis vel. Molestiae quis voluptatum sint numquam.","age":15,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Prof. Boyd McKenzie","email":"[email protected]","description":"Blanditiis maiores odio corporis eaque illum. Aut et rerum iste. Neque et ullam quisquam officia dignissimos quo cumque.","age":84,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Mr. Johann Smith","email":"[email protected]","description":"Temporibus amet magnam consequatur omnis consequatur illo fugit. Debitis natus doloremque est tempore deserunt vero. Harum eos corrupti nemo ut.","age":89,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Hector Pouros","email":"[email protected]","description":" as voluptatem inventore sit. Aliquam fugit perferendis est id aut odio et sapiente.","age":64,"active":1}}}'
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 9318 (#0)
> POST /bulk HTTP/1.1
> Host: localhost:9318
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Type: application/x-ndjson
> Content-Length: 1025
> Expect: 100-continue
>
* Done waiting for 100-continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Server: 4.2.0 15e927b@211223 release (columnar 1.11.4 327b3d4@211223)
< Content-Type: application/json; charset=UTF-8
< Content-Length: 434
<
* Connection #0 to host localhost left intact
{"items":[{"insert":{"table":"user","_id":2811798918248005633,"created":true,"result":"created","status":201}},{"insert":{"table":"user","_id":2811798918248005634,"created":true,"result":"created","status":201}},{"insert":{"table":"user","_id":2811798918248005635,"created":true,"result":"created","status":201}},{"insert":{"table":"user","_id":2811798918248005636,"created":true,"result":"created","status":201}}],"errors":false}
real 0m1.022s
user 0m0.001s
sys 0m0.010s
Теперь:
$ time curl -v -sX POST http://localhost:9318/bulk -H "Content-Type: application/x-ndjson" --data '{"insert": {"index": "user", "doc": {"name":"Prof. Matt Heaney IV","email":"[email protected]","description":"Tempora ullam eaque consequatur. Vero aut minima ut et ut omnis officiis vel. Molestiae quis voluptatum sint numquam.","age":15,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Prof. Boyd McKenzie","email":"[email protected]","description":"Blanditiis maiores odio corporis eaque illum. Aut et rerum iste. Neque et ullam quisquam officia dignissimos quo cumque.","age":84,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Mr. Johann Smith","email":"[email protected]","description":"Temporibus amet magnam consequatur omnis consequatur illo fugit. Debitis natus doloremque est tempore deserunt vero. Harum eos corrupti nemo ut.","age":89,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Hector Pouros","email":"[email protected]","description":" as voluptatem inventore sit. Aliquam fugit perferendis est id aut odio et sapiente.","age":64,"active":1}}}'
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 9318 (#0)
> POST /bulk HTTP/1.1
> Host: localhost:9318
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Type: application/x-ndjson
> Content-Length: 1025
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
< Server: 4.2.1 63e5749@220405 dev
< Content-Type: application/json; charset=UTF-8
< Content-Length: 0
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Server: 4.2.1 63e5749@220405 dev
< Content-Type: application/json; charset=UTF-8
< Content-Length: 147
<
* Connection #0 to host localhost left intact
{"items":[{"bulk":{"table":"user","_id":2811798919590182916,"created":4,"deleted":0,"updated":0,"result":"created","status":201}}],"errors":false}
real 0m0.015s
user 0m0.005s
sys 0m0.004s
⚠️ КРИТИЧЕСКОЕ ИЗМЕНЕНИЕ: Псевдошардирование включено по умолчанию. Если вы хотите отключить его, убедитесь, что добавили pseudo_sharding = 0 в раздел searchd вашего конфигурационного файла Manticore.
Наличие хотя бы одного полнотекстового поля в индексе реального времени/обычном индексе больше не является обязательным. Теперь вы можете использовать Manticore даже в случаях, не связанных с полнотекстовым поиском.
Быстрая выборка для атрибутов, использующих Manticore Columnar Library: запросы вида select * from <columnar table> теперь выполняются намного быстрее, чем раньше, особенно если в схеме много полей.
⚠️ КРИТИЧЕСКОЕ ИЗМЕНЕНИЕ: Неявный cutoff. Теперь Manticore не тратит время и ресурсы на обработку данных, которые вам не нужны в возвращаемом наборе результатов. Обратной стороной является то, что это влияет на total_found в SHOW META и на hits.total в JSON-выводе. Теперь это значение точно только в случае, если вы видите total_relation: eq, в то время как total_relation: gte означает, что фактическое количество соответствующих документов больше, чем полученное значение total_found. Чтобы сохранить прежнее поведение, можно использовать опцию поиска cutoff=0, которая делает total_relation всегда равным eq.
⚠️ КРИТИЧЕСКОЕ ИЗМЕНЕНИЕ: Все полнотекстовые поля теперь по умолчанию хранятся. Чтобы сделать все поля нехранимыми (т.е. вернуться к прежнему поведению), необходимо использовать stored_fields = (пустое значение).
#715 HTTP JSON поддерживает опции поиска.
.meta, .sph) были в бинарном формате, теперь это просто json. Новая версия Manticore автоматически преобразует старые индексы, но:
WARNING: ... syntax error, unexpected TOK_IDENTSHOW META после SELECT, и это будет работать так же, как и через mysql. Обратите внимание, что ранее заголовок HTTP Connection: keep-alive тоже поддерживался, но он только приводил к повторному использованию того же соединения. Начиная с этой версии он также делает сессию сессионной.columnar_attrs = *, чтобы определить все ваши атрибуты как колоночные в plain mode, что полезно, если список длинный.--new-cluster (запустите инструмент manticore_new_cluster в Linux).127.0.0.1 вместо 0.0.0.0 в случае, если в конфигурации вообще не указан listen. Хотя в конфигурации по умолчанию, которая поставляется с Manticore Search, параметр listen указан, и не типично иметь конфигурацию вообще без listen, это все же возможно. Ранее Manticore прослушивал бы 0.0.0.0, что небезопасно, теперь он прослушивает 127.0.0.1, который обычно не доступен из Интернета.AVG(): ранее Manticore использовал float внутренне для агрегаций, теперь он использует double, что значительно повышает точность.DEBUG malloc_stats для jemalloc.sphinxql. Если вы привыкли к формату plain, вам нужно добавить query_log_format = plain в ваш конфигурационный файл.max_connections, что могло вызывать ошибку "maxed out" для не-VIP соединений. Теперь VIP-соединения не учитываются в лимите. Текущее количество VIP-соединений также можно увидеть в SHOW STATUS и status./sql?mode=raw теперь требует экранирования и возвращает массив./bulk INSERT/REPLACE/DELETE:
low_priority и boolean_simplify теперь требуют значения (0/1): ранее вы могли делать SELECT ... OPTION low_priority, boolean_simplify, теперь вам нужно делать SELECT ... OPTION low_priority=1, boolean_simplify=1.query_log_format=sphinxql. Ранее записывалась только часть с полным текстом, теперь записывается как есть.⚠️ СУЩЕСТВЕННОЕ ИЗМЕНЕНИЕ: из-за новой структуры при обновлении до Manticore 5 рекомендуется удалить старые пакеты перед установкой новых:
yum remove manticore*apt remove manticore*Новая структура deb/rpm пакетов. Предыдущие версии предоставляли:
manticore-server с searchd (основной демон поиска) и всем необходимым для негоmanticore-tools с indexer и indextoolmanticore, включающий всеmanticore-all RPM как мета-пакет, ссылающийся на manticore-server и manticore-toolsНовая структура:
manticore - мета-пакет deb/rpm, который устанавливает все вышеперечисленное как зависимостиmanticore-server-core - searchd и все, чтобы запустить его отдельноmanticore-server - файлы systemd и другие вспомогательные скриптыmanticore-tools - indexer, indextool и другие инструментыmanticore-common - файл конфигурации по умолчанию, каталог данных по умолчанию, стоп-слова по умолчаниюmanticore-icudata, manticore-dev, manticore-converter не изменились сильно.tgz пакет, который включает все пакетыПоддержка Ubuntu Jammy
Поддержка Amazon Linux 2 через YUM репозиторий
application/x-ndjsonranker может быть указан дважды в журнале запросовВставка 1M PQ правил занимает 48 секунд и REPLACE всего 40K в 10K пакетах занимает 406 секунд.
root@perf3 ~ # mysql -P9306 -h0 -e "drop table if exists pq; create table pq (f text, f2 text, j json, s string) type='percolate';"; date; for m in `seq 1 1000`; do (echo -n "insert into pq (id,query,filters,tags) values "; for n in `seq 1 1000`; do echo -n "(0,'@f (cat | ( angry dog ) | (cute mouse)) @f2 def', 'j.json.language=\"en\"', '{\"tag1\":\"tag1\",\"tag2\":\"tag2\"}')"; [ $n != 1000 ] && echo -n ","; done; echo ";")|mysql -P9306 -h0; done; date; mysql -P9306 -h0 -e "select count(*) from pq"
Wed Dec 22 10:24:30 AM CET 2021
Wed Dec 22 10:25:18 AM CET 2021
+----------+
| count(*) |
+----------+
| 1000000 |
+----------+
root@perf3 ~ # date; (echo "begin;"; for offset in `seq 0 10000 30000`; do n=0; echo "replace into pq (id,query,filters,tags) values "; for id in `mysql -P9306 -h0 -NB -e "select id from pq limit $offset, 10000 option max_matches=1000000"`; do echo "($id,'@f (tiger | ( angry bear ) | (cute panda)) @f2 def', 'j.json.language=\"de\"', '{\"tag1\":\"tag1\",\"tag2\":\"tag2\"}')"; n=$((n+1)); [ $n != 10000 ] && echo -n ","; done; echo ";"; done; echo "commit;") > /tmp/replace.sql; date
Wed Dec 22 10:26:23 AM CET 2021
Wed Dec 22 10:26:27 AM CET 2021
root@perf3 ~ # time mysql -P9306 -h0 < /tmp/replace.sql
real 6m46.195s
user 0m0.035s
sys 0m0.008s
Вставка 1M PQ правил занимает 34 секунды и REPLACE их в 10K пакетах занимает 23 секунды.
root@perf3 ~ # mysql -P9306 -h0 -e "drop table if exists pq; create table pq (f text, f2 text, j json, s string) type='percolate';"; date; for m in `seq 1 1000`; do (echo -n "insert into pq (id,query,filters,tags) values "; for n in `seq 1 1000`; do echo -n "(0,'@f (cat | ( angry dog ) | (cute mouse)) @f2 def', 'j.json.language=\"en\"', '{\"tag1\":\"tag1\",\"tag2\":\"tag2\"}')"; [ $n != 1000 ] && echo -n ","; done; echo ";")|mysql -P9306 -h0; done; date; mysql -P9306 -h0 -e "select count(*) from pq"
Wed Dec 22 10:06:38 AM CET 2021
Wed Dec 22 10:07:12 AM CET 2021
+----------+
| count(*) |
+----------+
| 1000000 |
+----------+
root@perf3 ~ # date; (echo "begin;"; for offset in `seq 0 10000 990000`; do n=0; echo "replace into pq (id,query,filters,tags) values "; for id in `mysql -P9306 -h0 -NB -e "select id from pq limit $offset, 10000 option max_matches=1000000"`; do echo "($id,'@f (tiger | ( angry bear ) | (cute panda)) @f2 def', 'j.json.language=\"de\"', '{\"tag1\":\"tag1\",\"tag2\":\"tag2\"}')"; n=$((n+1)); [ $n != 10000 ] && echo -n ","; done; echo ";"; done; echo "commit;") > /tmp/replace.sql; date
Wed Dec 22 10:12:31 AM CET 2021
Wed Dec 22 10:14:00 AM CET 2021
root@perf3 ~ # time mysql -P9306 -h0 < /tmp/replace.sql
real 0m23.248s
user 0m0.891s
sys 0m0.047s
searchd. Это полезно, когда вы хотите ограничить количество RT чанков во всех ваших индексах до определенного числа глобально.YEAR() и других функций временных меток.rt_mem_limit данных перед сохранением нового дискового чанка на диск, и во время сохранения все еще собирал до 10% больше (так называемый двойной буфер), чтобы минимизировать возможные задержки вставки. Если этот лимит также исчерпывался, добавление новых документов блокировалось до полного сохранения дискового чанка на диск. Новый адаптивный лимит основан на том факте, что у нас теперь есть auto-optimize, так что это не большая проблема, если дисковые чанки не полностью соблюдают rt_mem_limit и начинают сбрасывать дисковый чанк раньше. Теперь мы собираем до 50% rt_mem_limit и сохраняем это как дисковый чанк. При сохранении мы смотрим на статистику (сколько мы сохранили, сколько новых документов поступило во время сохранения) и пересчитываем начальную скорость, которая будет использоваться в следующий раз. Например, если мы сохранили 90 миллионов документов, и еще 10 миллионов документов поступило во время сохранения, скорость составляет 90%, так что мы знаем, что в следующий раз мы можем собрать до 90% rt_mem_limit перед началом сброса другого дискового чанка. Значение скорости рассчитывается автоматически от 33.3% до 95%.indexer -v и --version. Ранее вы все еще могли видеть версию индексатора, но -v/--version не поддерживались.MANTICORE_TRACK_RT_ERRORS, полезная для отладки повреждений сегментов RT./var/lib/manticore/binlog/, кроме binlog.meta после остановки предыдущего экземпляра.show threads option format=all. Он показывает стек некоторых информационных билетов задач, наиболее полезен для профилирования, так что если вы парсите вывод show threads, будьте внимательны к новому столбцу.searchd.workers был устаревшим с версии 3.5.0, теперь он считается устаревшим, если вы все еще имеете его в вашем конфигурационном файле, это вызовет предупреждение при запуске. Manticore Search запустится, но с предупреждением.PDO::ATTR_EMULATE_PREPARESindextool --check мог аварийно завершитьсяПолная поддержка Manticore Columnar Library. Ранее Manticore Columnar Library поддерживалась только для обычных индексов. Теперь она поддерживается:
INSERT, REPLACE, DELETE, OPTIMIZEALTERindextool --checkАвтоматическая компакция индексов (Проблема #478). Наконец, вам не нужно вручную вызывать OPTIMIZE или через крон-задачу или другой вид автоматизации. Manticore теперь делает это автоматически и по умолчанию. Вы можете установить порог компакции по умолчанию через optimize_cutoff глобальную переменную.
Переработка системы снимков и блокировок чанков. Эти изменения могут быть невидимы снаружи на первый взгляд, но они значительно улучшают поведение многих вещей, происходящих в индексах реального времени. В двух словах, ранее большинство операций манипуляции данными Manticore сильно полагались на блокировки, теперь мы используем снимки дисковых чанков вместо этого.
Значительно более высокая производительность массовых вставок в индекс реального времени. Например, на сервере AX101 от Hetzner с SSD, 128 ГБ ОЗУ и AMD Ryzen™ 9 5950X (16*2 ядра) с 3.6.0 вы могли вставить 236K документов в секунду в таблицу со схемой name text, email string, description text, age int, active bit(1) (по умолчанию rt_mem_limit, размер пакета 25000, 16 параллельных рабочих процессов вставки, всего вставлено 16 миллионов документов). В 4.0.2 та же степень параллелизма/размер пакета/количество дает 357K документов в секунду.
ALTER может добавлять/удалять полнотекстовое поле (в RT-режиме). Ранее можно было только добавлять/удалять атрибут.
🔬 Экспериментально: псевдошардирование для запросов с полным сканированием - позволяет распараллелить любой запрос, не являющийся полнотекстовым поиском. Вместо ручной подготовки шардов теперь можно просто включить новую опцию searchd.pseudo_sharding и ожидать снижения времени отклика до CPU cores раз для запросов, не являющихся полнотекстовым поиском. Обратите внимание, что это может легко занять все имеющиеся ядра CPU, поэтому если важна не только задержка, но и пропускная способность - используйте с осторожностью.
time curl -X POST -d '{"update":{"index":"idx","id":4611686018427387905,"doc":{"mode":0}}}' -H "Content-Type: application/x-ndjson" http://127.0.0.1:6358/json/bulk
real 0m43.783s
user 0m0.008s
sys 0m0.007s
time curl -X POST -d '{"update":{"index":"idx","id":4611686018427387905,"doc":{"mode":0}}}' -H "Content-Type: application/x-ndjson" http://127.0.0.1:6358/json/bulk
real 0m0.006s
user 0m0.004s
sys 0m0.001s
--replay-flags=ignore-trx-errors и --replay-flags=ignore-all-errors, чтобы можно было запустить searchd, даже если binlog повреждёнcharset_table изменено с 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+401->U+451, U+451 на non_cjkOPTIMIZE выполняется автоматически. Если он не нужен, убедитесь, что установили auto_optimize=0 в секции searchd конфигурационного файлаondisk_attrs_default были устаревшими, теперь они удаленыtotal в SHOW META, но не на total_found, который является фактическим количеством найденных документов./var/lib/manticore/binlog/ не должно быть файлов binlog (в директории должен быть только binlog.meta)--new-cluster (запустите инструмент manticore_new_cluster в Linux).ERROR 1064 (42000): invalid GTID, (null), донор мог перестать отвечать, пока другой узел присоединялсяindextool --help не отображает параметр --rotatesearchd --stopwait завершается с ошибкой под root. Также исправлено поведение systemctl (ранее он показывал ошибку для ExecStop и не ждал достаточно долго для корректной остановки searchd)command_insert, command_replace и другие показывали неверные метрикиcharset_table для обычного индекса имела неверное значение по умолчаниюSELECT * FROM pq ORDER BY id desc LIMIT 1000 , 100 OPTION max_matches=1100 ранее не работалПоддерживающий релиз перед Manticore 4
manticore_new_cluster [--force], полезный для перезапуска кластера репликации через systemdindexer --mergeblend_mode='trim_all'WHERE json.a = 1DEBUG SPLIT как предварительное условие для автоматического шардирования/перебалансировкиindextool --dumpheaderreverse_scan устарел. Убедитесь, что вы не используете эту опцию в своих запросах, начиная с версии 3.6.0, иначе они завершатся ошибкойreverse_scan устарелаindexer --all и в файле конфигурации есть не только простые индексы. Без ignore_non_plain=1 вы получите предупреждение и соответствующий код завершения.indexer --verbose устарел, так как он никогда ничего не добавлял к выводу indexerUSR2 вместо USR12* Количество ядер) вместо одного. Оптимальное количество чанков можно контролировать с помощью опции cutoff.0.SELECT количество потоков можно ограничить с помощью OPTION threads=N, переопределяя глобальный max_threads_per_query./search получает базовую поддержку фасетного поиска/группировки с помощью нового узла запроса aggs.listen=...:sphinx необходимо явно установить для подключений SphinxSE или клиентов SphinxAPI.killed_documents, killed_rate, disk_mapped_doclists, disk_mapped_cached_doclists, disk_mapped_hitlists и disk_mapped_cached_hitlists.status теперь выводит Queue\Threads и Tasks\Threads.dist_threads теперь полностью устарел, searchd будет записывать предупреждение, если директива все еще используется.Официальный образ Docker теперь основан на Ubuntu 20.04 LTS
Помимо обычного пакета manticore, вы также можете установить Manticore Search по компонентам:
manticore-server-core - предоставляет searchd, manpage, каталог логов, API и модуль galera. Он также установит manticore-common как зависимость.manticore-server - предоставляет автоматизационные скрипты для ядра (init.d, systemd) и обертку manticore_new_cluster. Он также установит manticore-server-core как зависимость.manticore-common - предоставляет конфигурацию, стоп-слова, общие документы и скелетные папки (datadir, модули и т.д.)manticore-tools - предоставляет вспомогательные инструменты (indexer, indextool и т.д.), их manpages и примеры. Он также установит manticore-common как зависимость.manticore-icudata (RPM) или manticore-icudata-65l (DEB) - предоставляет файл данных ICU для использования морфологии icu.manticore-devel (RPM) или manticore-dev (DEB) - предоставляет заголовки для разработки UDF.Этот релиз занял так много времени, потому что мы усердно работали над изменением многозадачного режима с потоков на корутины. Это упрощает конфигурацию и делает параллелизацию запросов гораздо более понятной: Manticore просто использует заданное количество потоков (см. новую настройку threads), и новый режим гарантирует, что это сделано наиболее оптимальным образом.
Изменения в подсветке:
highlight({},'field1, field2') или highlight в json запросах) теперь по умолчанию применяет ограничения на поле.highlight({}, string_attr) или snippet() теперь применяет ограничения ко всему документу.limits_per_field=0 (1 по умолчанию).0 по умолчанию для подсветки через HTTP JSON.Один и тот же порт теперь может использоваться для http, https и бинарного API (для принятия соединений от удаленного экземпляра Manticore). listen = *:mysql по-прежнему требуется для соединений через mysql протокол. Manticore теперь автоматически определяет тип клиента, пытающегося подключиться к нему, за исключением MySQL (из-за ограничений протокола).
В режиме RT поле теперь может быть текстовым и строковым атрибутом одновременно - проблема GitHub #331.
В обычном режиме это называется sql_field_string. Теперь это доступно в RT режиме для индексов реального времени тоже. Вы можете использовать это, как показано в примере:
create table t(f string attribute indexed);
insert into t values(0,'abc','abc');
select * from t where match('abc');
+---------------------+------+
| id | f |
+---------------------+------+
| 2810845392541843463 | abc |
+---------------------+------+
1 row in set (0.01 sec)
mysql> select * from t where f='abc';
+---------------------+------+
| id | f |
+---------------------+------+
| 2810845392541843463 | abc |
+---------------------+------+
1 row in set (0.00 sec)
status клиента mysql.in теперь доступен через HTTP JSON интерфейс.expressions в HTTP JSON.rt_mem_limit на лету в RT-режиме, т.е. можно выполнять ALTER ... rt_mem_limit=<новое значение>.chinese, japanese и korean.SHOW THREADS.CALL PQ в SHOW THREADS.SET [GLOBAL] wait_timeout=NUM ,INSERT INTO PQ VALUES() (т.е. без указания списка столбцов) ранее ожидал строго значения (query, tags). Это изменено на (id,query,tags,filters). ID можно установить в 0, если требуется его авто-генерация.allow_empty=0 теперь значение по умолчанию при подсветке через HTTP JSON интерфейс.CREATE TABLE/ALTER TABLE для внешних файлов (стоп-слов, исключений и т.д.) разрешены только абсолютные пути.ram_chunks_count переименована в ram_chunk_segments_count в SHOW INDEX STATUS.workers устарел. Теперь существует только один режим workers.dist_threads устарел. Все запросы теперь максимально параллельны (ограничены threads и jobs_queue_size).max_children устарел. Используйте threads для установки количества потоков, которые будет использовать Manticore (по умолчанию равно количеству ядер ЦП).queue_max_length устарел. Вместо этого, если это действительно необходимо, используйте jobs_queue_size для тонкой настройки размера внутренней очереди заданий (по умолчанию не ограничен)./json/* теперь доступны без /json/, например, /search, /insert, /delete, /pq и т.д.field, означающее "полнотекстовое поле", переименовано в "text" в describe.
<!-- more -->
3.4.2:
mysql> describe t;
+-------+--------+----------------+
| Field | Type | Properties |
+-------+--------+----------------+
| id | bigint | |
| f | field | indexed stored |
+-------+--------+----------------+
mysql> describe t;
+-------+--------+----------------+
| Field | Type | Properties |
+-------+--------+----------------+
| id | bigint | |
| f | text | indexed stored |
+-------+--------+----------------+
и больше не отображается в i в non_cjk charset_table (которая используется по умолчанию), так как это слишком сильно влияло на русские стеммеры и лемматизаторы.read_timeout. Используйте вместо этого network_timeout, который контролирует как чтение, так и запись.manticore-bin на manticorecount(*) показывает разные числа/json/replace и json/update возвращают id в экспоненциальной формеhitless_words не работает в режиме RTALTER RECONFIGURE в режиме rt должен быть запрещенrt_mem_limit сбрасывается на 128M после перезапуска searchdSHOW CREATE TABLE против нескольких файлов словоформSHOW CREATE TABLE не работает для PQCREATE TABLE LIKE не работает должным образом для PQCREATE TABLE LIKEALTER reconfigure повреждает индекс PQHIGHLIGHT() не выделяет в строковых атрибутахFACET не удается отсортировать по строковому атрибутуCALL PQ возвращает "Плохие JSON-объекты в строках: 1", когда json превышает некоторое значение.max_xmlpipe2_field = 2M возвращает предупреждение о поле 2M[null] в json attr в centos 7 вызывает поврежденные вставленные данные/sql теперь такой же, как ответ /json/searchaccess_plain_attrs, access_blob_attrs, access_doclists, access_hitlistsserver_id для настроек репликации/searchread_buffer, ondisk_attrs, ondisk_attrs_default, mlock заменены директивами access_*Минимальная версия Cmake теперь 3.13. Для компиляции требуются библиотеки boost и libssl для разработки.
format=sphinxql выводит все запросы в SQL форматеclone_attrsshutdown с использованием команды DEBUGdocs_id для документов, вызываемых в CALL PQ.SET wait_timeout (для лучшей совместимости с ProxySQL)-DUSE_JEMALLOC=1В этом выпуске мы изменили внутренний протокол, используемый мастерами и агентами для взаимодействия друг с другом. В случае, если вы запускаете Manticoresearch в распределенной среде с несколькими экземплярами, убедитесь, что сначала обновляете агентов, а затем мастеров.
multiplier, когда используется оптимизация мультизапросовManticore Search собирается с помощью cmake, минимальная требуемая версия gcc для компиляции — 4.7.2.
manticore./var/lib/manticore/./var/log/manticore/./var/run/manticore/.