# SearchAI Index Server 1.2.0 (2026-09-17)

Performance release: higher clustered-write throughput, lower replicated-write
latency, faster reads, and reduced per-request memory — a drop-in upgrade over
1.1.0 with no configuration or on-disk format changes.

## Platforms (all built natively)
- searchai-index-server-1.2.0-linux-arm64.tar.gz (Graviton/ARM servers)
- searchai-index-server-1.2.0-linux-amd64.tar.gz (x86_64 glibc servers)
- searchai-index-server-1.2.0-osx-arm64.tar.gz (Apple Silicon dev)

## Write path
- **Group-commit replication log**: a bulk (and each replicated batch) now
  fsyncs the op-log once per batch instead of once per document. Clustered
  ingest is no longer bounded by per-document fsync rate.
- **Event-driven replication**: replicas receive fresh writes as soon as they
  are appended (peers stream back-to-back while catching up and wait on a
  condition variable when idle) instead of on a fixed 200 ms cadence. Acked
  clustered writes commit in single-digit milliseconds rather than up to a
  full replication tick.
- **Keep-alive inter-node connections**: replication and consensus RPCs reuse
  a persistent connection per peer instead of opening a new socket (and TLS
  handshake, when `cluster.tls=true`) per message.
- **Batched bulk updates and deletes**: consecutive `update`/`delete` items in
  a `_bulk` request resolve and apply as one engine batch.
- **No mid-crawl failures during background merges**: writes now retry briefly
  across a maintenance window instead of failing an item.

## Read path
- **Compiled filter scans**: cached-column filter evaluation resolves fields,
  bounds, and terms once per query rather than per row.
- **Verbatim `_source` passthrough**: full-document hits are returned without a
  parse/re-serialize round trip.
- **Lower per-request memory** on large scored+aggregation queries, and
  reduced allocator contention on index lookups (reader-writer locking).
- **Exact `_count`** above 10,000 matches for filter queries (previously
  reported the window cap).
- **Reused inference connections** for auto-embedding and reranking — lower
  latency for semantic and hybrid search.

## Operations
- **Non-blocking snapshots**: `wait_for_completion=false` now returns
  immediately and runs the snapshot in the background, with status visible via
  `GET _snapshot`.
- **New `/_metrics` counter** `searchai_fallback_iterator_scans_total` — rises
  when a query exceeds the in-memory fast-path ceiling, so operators can see an
  index crossing that threshold without per-request tracing.
- **HTTP front-end**: connection worker reuse, tuned TCP keep-alive probing,
  larger accept backlog, and exact-length request-body reads reduce latency
  spikes under connection churn and large `_bulk` bodies.

## Upgrade notes
Drop-in over 1.1.0 — same configuration, same on-disk format, same wire
compatibility. No action required beyond replacing the binary/bundle. In a
cluster, upgrade nodes one at a time as usual.

## Verification
Each bundle was built and smoke-tested natively on its platform with the
patched embedded engine. Full suites at 1.2.0: 94 unit/probe tests + the
complete pytest suite (cluster, raft failover/membership/snapshot/chaos,
crash-recovery, TLS, security, dialects via real client libraries, bulk,
aggregations, scroll, snapshots), plus live auto-embedding and neural-query
validation against the inference server.
