ESPNEurope, U.S. tied 4-4 at Solheim Cup after Ciganda's late heroicsוואלההתינוקת הראשנה של השנה החדשה נולדה במרכז רפואי פוריהESPN DeportesDebuta en Champions y lo expulsan a los 50 seg.RTP Desporto18h30 Porto regressa a Rio Maior, Portugal perde no EurovoleiDaily MaverickThe Gathering 2026: Power to the people — Communities step up as municipalities failBBC NewsCricket: Today at the TestThe Jerusalem PostRosh Hashanah 2026: Top 10 things to pray for in 5787 - opinionESPN CricinfoBen Aitchison five-for hurts Kent's promotion challengeMintMaria Bartiromo Fox News departure: Former anchor speaks out for first time after exit, hints at what lies aheadANSAAddio a Emma Bonino, una vita in prima linea per i dirittiConsequenceJudge Judy Retiring from the TV Bench This OctoberDeadline‘Onwards and Sideways’: Rhys Ifans, Laura Linney & John Madden On Making A Parkinson’s Story That Finds Laughter & Love In The Unexpected — Toronto
The Daily Newsstand · Free, Always
Friday, September 11, 2026

[Перевод] Manticore Search 29.9.0: chunked auto-embeddings и mmap-доступ к columnar-атрибутам

Translate

Manticore Search 29.9.0: chunked auto-embeddings и mmap-доступ к columnar-атрибутам

Manticore Search 29.9.0 добавляет chunked и multi-vector auto-embeddings, ограничение входа для embedding-моделей, UTF-8 идентификаторы, mmap-доступ к columnar-атрибутам по умолчанию, а также исправления для hybrid search, KNN, bulk ingestion и группировки.

Вышел [Manticore Search 29.9.0](https://mnt.cr/go/6d9yh8 Главное изменение относится к auto-embeddings: длинные документы теперь можно разбивать на фрагменты, а один документ может хранить несколько векторов вместо того, чтобы сжимать всё содержимое в один. В релизе также mmap стал режимом доступа к columnar-атрибутам по умолчанию, появились более безопасные настройки для embedding-нагрузок, UTF-8 идентификаторы, улучшения backup и исправления в hybrid search, KNN, bulk ingestion, grouped search и изменениях схемы.

Этот пост покрывает всё, что вышло после 29.0.2, с 29.0.3 по 29.9.0.

Спасибо [@tudorvasinca](https://mnt.cr/go/TIds5B за работу над [PR #4857](https://mnt.cr/go/B1SXr5, [PR #4859](https://mnt.cr/go/O0eEjC и [PR #4873](https://mnt.cr/go/drbfcB

Что учесть при обновлении

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

  • Нормализация немецкого sharp-s включается явно. Если переключить существующую таблицу на lemmatize_de_v2 или lemmatize_de_v2_all, индексируемые термы изменятся, поэтому plain-таблицу нужно перестроить, а документы в RT-таблицу — переиграть заново.

  • Для authenticated BACKUP появилось действие авторизации backup. Перед downgrade до 29.3.12 или более ранней версии нужно удалить все backup grants.

  • Columnar-атрибуты теперь используют mmap по умолчанию вместо buffered file reads. Если нужен прежний режим доступа, задайте access_columnar_attrs='file' явно.

Длинные документы могут хранить больше одного embedding

Старый путь auto-embedding создавал один вектор на документ и обрезал текст, который не помещался в окно входа модели. Для заголовков и коротких описаний это работает, но релевантный абзац ближе к концу длинной статьи мог вообще не попасть в индекс.

Manticore Search теперь поддерживает пять [стратегий разбиения на chunks](https://mnt.cr/go/fCxeBG

  • truncate сохраняет прежнее поведение и остаётся стратегией по умолчанию.

  • mean строит embedding для каждого chunk и усредняет результаты в один вектор.

  • fixed разбивает текст на окна фиксированного размера в токенах.

  • recursive предпочитает границы абзацев, строк, предложений и пробелов именно в таком порядке.

  • sentence группирует полные предложения до заданного лимита.

Multi-vector стратегии используют [float_vector_array](https://mnt.cr/go/UuFwcw Каждый chunk участвует в KNN-поиске независимо, но Manticore возвращает документ один раз и использует ближайший chunk для knn_dist():

CREATE TABLE articles (
  title text,
  content text,
  chunks float_vector_array knn_type='hnsw' hnsw_similarity='cosine'
    model_name='Xenova/all-MiniLM-L6-v2' from='title,content'
    chunk_strategy='sentence' max_tokens='256' overlap_tokens='32'
);

INSERT INTO articles (id, title, content)
VALUES (1, 'Rotating certificates', 'A long guide with many sections ...');

SELECT id, knn_dist()
FROM articles
WHERE knn(chunks, 5, 'how do I rotate a certificate');

MAX_TOKENS, OVERLAP_TOKENS и MAX_CHUNKS управляют размером chunk, общим контекстом на границах и максимальным количеством векторов. Model-backed float_vector_array нужно объявлять при создании таблицы: добавить его позже через ALTER TABLE ... ADD COLUMN и перестроить embeddings пока нельзя.

Ограничение локальной embedding-нагрузки

Модели с длинным контекстом могут сделать один большой вход неожиданно дорогим, особенно на CPU. Новая опция колонки [MAX_INPUT_TOKENS](https://mnt.cr/go/zZvLPe ограничивает объём каждого входа, который отправляется в локальную embedding-модель:

ALTER TABLE articles
MODIFY COLUMN chunks MAX_INPUT_TOKENS='512';

Изменение применяется к embeddings, созданным после этого; существующие векторы остаются как есть. Опцию можно задать при CREATE TABLE или изменить позже без re-embedding таблицы. Значение 0 или отсутствие опции использует собственный лимит модели.

В этом же направлении исправлены две менее заметные проблемы: модели больше не остаются в cache после изменения embedding-колонки, а конфигурации с разными API_TIMEOUT или MAX_INPUT_TOKENS больше не сталкиваются и не переиспользуют неверную cached model.

UTF-8 идентификаторы и лучшее сопоставление немецких слов

Имена таблиц, полей и атрибутов теперь используют единый [безопасный синтаксис UTF-8 идентификаторов](https://mnt.cr/go/6un5co RT, percolate, distributed, template и plain tables могут использовать локализованные имена, например китайские или кириллические идентификаторы, в DDL, выражениях, field selectors и inferred source schemas.

Немецкая AOT-морфология получила опциональную нормализацию sharp-s. С charset_table=non_cont,german и morphology=lemmatize_de_v2 или lemmatize_de_v2_all формы вроде Straße, Strasse и STRAẞE совпадают в ordinary whole-word searches. Если включён index_exact_words=1, exact-word queries всё ещё могут различать формы ß и ss.

Улучшения load testing и backup

[manticore-load](https://mnt.cr/go/sdBXEJ теперь может запускать benchmark через HTTP JSON API с --http. Записи используют /bulk, поиски — /search, а --table выбирает целевую таблицу. Отчёты теперь включают RSS локального searchd во время запуска, а также peak RSS, disk и CPU statistics в конце, включая aggregate monitoring для multi-command workloads.

[Manticore Backup](https://mnt.cr/go/2yXrq7 теперь работает с authenticated Manticore Search installations через username/password или bearer-token credentials. SQL [BACKUP](https://mnt.cr/go/eqvadg получил отдельное authorization action и проверяет read access к выбранным таблицам.

S3 backups и restores также могут использовать AWS SDK credential provider chain, когда static keys не заданы. Это включает IRSA, shared credentials, ECS task roles и EC2 instance profiles. Temporary credentials могут задавать AWS_SESSION_TOKEN.

Columnar-атрибуты используют mmap по умолчанию

Manticore Search теперь по умолчанию ставит [access_columnar_attrs](https://mnt.cr/go/6A7EpL в mmap. Операционная система отображает и кэширует файлы columnar-атрибутов *.spc по требованию, без предварительного чтения всего файла на старте. Прежний buffered path остаётся доступен через access_columnar_attrs='file'.

ALTER TABLE также переоткрывает заменённое columnar storage с настроенным режимом доступа, поэтому изменённая таблица больше не откатывается к другому reader, отличному от запрошенного.

Исправления vector и grouped search

Несколько исправлений касаются запросов, которые были валидными, но могли возвращать неполные результаты или падать при определённой структуре таблиц:

  • Distributed и sharded KNN queries с local shard больше не пересчитывают merged 1-bit-quantized results дважды, что могло привести к crash coordinator или неверному nearest neighbor. ([Issue #4791](https://mnt.cr/go/iuOi6U

  • KNN queries с дополнительными filters избегают лишнего knn_dist prefilter, когда HNSW уже исключает документы без векторов. ([PR #4861](https://mnt.cr/go/UTI8PT

  • LENGTH() для float_vector_array теперь возвращает количество векторов, а не внутренний storage-word count. ([PR #4879](https://mnt.cr/go/he0eBc

  • Hybrid search с GROUP BY сохраняет все buckets, включая MVA groups, и соблюдает final и within-group ordering. ([Issue #4639](https://mnt.cr/go/W77QRM

  • Hybrid filters по weight() и expressions или aliases, derived from it, теперь выполняются после fusion по итоговому text weight, а не игнорируются. Weight-dependent filters внутри OR trees остаются неподдержанными и возвращают явную ошибку. ([Issue #4889](https://mnt.cr/go/VOf6Qq

  • Multi-chunk RT grouping больше не рискует duplicate groups, неверными split counts или hang при ordering COUNT(DISTINCT ...) results. ([Issue #4856](https://mnt.cr/go/fwDLRA

  • Фильтры по document ID, signed representation которых отрицательный, теперь следуют unsigned ordering lookup index. ([Issue #4774](https://mnt.cr/go/VPvgyV

Также исправлены crash-сценарии: второй hybrid-search statement в multi-statement request ([PR #4864](https://mnt.cr/go/i5Kymv, distributed JSON aggregation с сортировкой по string attribute ([Issue #4822](https://mnt.cr/go/NCIurP и drop table во время auto-embedding precommit ([Issue #4860](https://mnt.cr/go/D22E3f

Bulk ingestion стал предсказуемее

Elasticsearch-compatible /_bulk requests теперь возвращают HTTP 200 после обработки batch, а отдельные ошибки остаются видны через errors: true и per-item statuses. Duplicate create actions возвращают per-item 409 version_conflict_engine_exception, включая дубликаты внутри одного batch. Это не даёт клиентам вроде Fluent Bit повторять записи, которые уже успешно прошли.

Fixed-length gzip-compressed /bulk bodies теперь корректно декодируются, даже если приходят через несколько socket reads. А если native bulk processing падает из-за отсутствия целевой таблицы, request снова может дойти до auto-schema fallback Manticore с валидным NDJSON и сохранить ожидаемый bulk response envelope.

Ещё исправления надёжности

Остальная часть релиза закрывает широкий набор operational и compatibility проблем:

  • searchd --stopwait больше не зависает, пока sharded table rebalanced после возвращения node. ([Issue #3905](https://mnt.cr/go/jopxPb

  • Совместимые старые binlogs безопасно replay during upgrade, а completed RT chunks публикуются перед clean shutdown. ([Issue #4808](https://mnt.cr/go/y6w4GH Fatal replay diagnostics также называют нужный recovery flag. ([Issue #4811](https://mnt.cr/go/9w6uNo

  • indexer создаёт отсутствующие parent directories для plain-table paths, если ближайший существующий parent writable. ([Issue #4793](https://mnt.cr/go/2AyJ8K

  • UUID document IDs больше не приводят к пустым stored text fields. ([Issue #4833](https://mnt.cr/go/hErEYm

  • ALTER TABLE ... RENAME сохраняет hidden remote embedding API keys, не показывая их в SHOW CREATE TABLE. ([Issue #4842](https://mnt.cr/go/YuCTPF

  • Compatibility probes Sequel Ace 5.3.1+ снова работают. ([Issue #4828](https://mnt.cr/go/bVXFrw

  • JSON /search сохраняет distances для negated NEAR и proximity operators. ([Issue #4784](https://mnt.cr/go/tsDLTu

  • Internal string-sort helper columns больше не протекают из LEFT JOIN results. ([Issue #4788](https://mnt.cr/go/wS6uNG

  • Malformed binary API SEARCH element counts теперь отклоняются, а не завершают searchd. ([PR #4790](https://mnt.cr/go/8l9q4g

Полный список — в [changelog версии 29.9.0](https://mnt.cr/go/Zf4B8X

Как получить Manticore Search 29.9.0

Установите или обновите Manticore Search по [инструкции по установке](https://mnt.cr/go/6d9yh8 Если вы используете columnar-атрибуты, немецкую AOT-морфологию или authenticated backups, посмотрите notes по обновлению выше.

Нужна помощь или хотите пообщаться?

View the original on Хабр

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.