1.20.0
Changelog
Features 🎶
- #10750 - BM25 scoring directly on the full-text payload index [docs]
- Milestone #57 - TurboQuant: new
turbo8andturbo16vector datatypes [docs] - #11125 - Per-element payload indexes: new
nestedindex parameter, faster nested condition filtering. [docs] - #11180, #11263 - New
codetokenizer for full-text index [docs] - #10466 - Configurable audit log output:
audit.outputwrites audit events tofile(default),stdoutorstderr[docs] - #10992 - Collection creation time:
created_atis recorded and returned in collection info [docs] - #10711 - Substring filter condition:
match: { substring: "..." }(full-scan only) [docs] - #10231, #10287, #10296 - New formula query expressions:
acosh,max,min[docs] and [docs] - #10597, #10598 - Configurable ID tracker memory placement [docs]
Improvements 🎵
- #11009, #11020 - Faster HNSW payload links build - builder sized to the block, not the segment, and reused
- #11083 - Faster HNSW healing - payload blocks reuse old graph links;
m = 0graphs can heal too - #11166 - Smaller HNSW upper layers -
floor()in level assignment matches the HNSW paper (6.25% of points on level 1 atm = 16, not 25%) - #10976 - Faster PQ training - k-means sample gathered in one pass, not one per chunk
- #10975 - Faster scalar quantization search - AVX512-VNNI and AVX-VNNI kernels for int8 dot product
- #10977 - Less search slowdown during optimizations - the whole optimization job runs at low thread priority
- #11078, #11080 - Fewer cancelled optimizations - optimizers are recreated only when their config changes
- #11234 - Faster point retrieval - ids resolved in one batch per segment
- #11070 - Faster snapshot transfers and downloads - 4 MiB stream buffers instead of 4 KiB
- #11253 - Faster shard transfers -
transfer_raw_pointsandtransfer_raw_payloadson by default - #11206 - Safer snapshots - unique snapshot names, and a stored snapshot is never overwritten
- #11221 - No stuck snapshot downloads - 60s timeout when the server never responds
- #11163 - No blocking thread leak on telemetry timeout - the timeout also applies inside the blocking task
- #11164 - Clearer tar unpack errors - release builds report the error kind (e.g.
timed out) instead of "malformed archive" - #11118 - Log timestamps respect timezone - set with the
TZenvironment variable, UTC by default - #10235 -
timeoutparameter for the get points API - Milestone #58 - Less disk usage with
hnsw_config.inline_storage- vectors are stored only inside the HNSW graph file, without a separate vector storage copy - #10790 - Faster
enable_hnswchange on payload indexes - updated in place instead of dropping and rebuilding the index - #10906 - Faster search over on-disk vectors - batches of vectors are prefetched with
madvise(WILLNEED)before scoring - #10907 - ACORN on
m = 0graphs - search uses the payload-block links of the graph - #11255 - Better shard distribution in small clusters - auto-sharded collections get 2 shards per node in 3+ node clusters while collections are fewer than nodes
- #11273 - No internal request stalls behind NAT and load balancers - HTTP/2 keepalive on internal p2p gRPC
- #11289 - Configurable snapshot storage timeouts and retries - new
timeout_sec,connect_timeout_sec,max_retries,retry_timeout_secin S3, GCS and Azure config
Bug fixes 🎼
- #10932, #10971 - Fix collection reads stalling while a shard transfer holds the shard holder lock
- #10949 - Fix live-lock between shard transfer start and consensus operations
- #10956 - Fix collection being blocked while a shard snapshot is extracted
- #11075 - Fix
must_notconditions being ignored when equal to an indexedmustcondition - #11101 - Fix datetime filters with microseconds behaving differently with and without a payload index
- #10948 - Fix renaming an alias to an existing collection name being accepted
- #10887 - Fix transfer staying registered after crash replay of replica removal during transfer abort
- #11121 - Fix S3 snapshot upload completing truncated on a local read error
- #10796 - Fix Japanese tokenizer ignoring
min_token_len,max_token_len,stemmer,ascii_foldingand case-insensitive stopwords - #10754 - Fix quantization build with MSVC-like compilers (clang-cl)
Security 🔑
- #10854 - Internal auth is enforced by default:
service.enforce_internal_authnow defaults totruewhen an API key is configured - #10718 - Startup warning when distributed mode has an API key configured but
enforce_internal_authis off - #11275, #11290 - Reject vector names that escape the segment directory, including
.and.. - #11278 - Update rustls-webpki and webpki-root-certs for RUSTSEC-2026-0382 and RUSTSEC-2026-0383
Qdrant Edge 📀
- #11085 - WAL-less mode for edge shards:
EdgeConfig::wal_enabled(false)skips WAL writes, updates are durable afterflush() - #11084 - Fix updates lost on crash: unacknowledged WAL operations are replayed when an edge shard is loaded
- #11082 - Fix
EdgeShard::flushnot acknowledging the persisted version in the WAL