Skip to content

Reference

Glossary

The vocabulary the documentation assumes - the terms of the ysearch design, and those of the search engine it inherited from yolosearch.


The first part defines the terms of the ysearch design. Most of what they name is specified and not built yet; Status says what exists. The second part defines the terms of the inherited search engine, which is what runs on main today.

ysearch design terms

Several of these are easy to confuse. The pairs to watch: the fencing epoch F versus the statistics epoch E(G); the catalog generation G versus the table generation T; v(d) versus v(c, d); and the floor F_c versus the forecast F(a, W).

Term Meaning
KV plane The replicated, convergent key-value store on SSD: documents, traffic, campaigns, dials, locators, hot match rows (KV plane)
segment plane The S3-authoritative plane of immutable segments, catalogs, match cells, and tables (segments)
partition, pid One of 4,096 KV partitions: pid = (crc16(userkey) % 16384) >> 2, honouring {hash tags}
H1 A partition's highest-ranked active owner under HRW placement. Not a consistency primary; it runs the indexer, the fresh tail, and provisional matching
HLC Hybrid logical clock: 48-bit milliseconds and a 16-bit counter
v(d) A document's current version (doc_hlc, doc_digest) in the KV plane; the authority for which indexed version is current
v(c, d) The vector score of campaign c on article d: the cosine, clamped to [0, 1]
gossip The SWIM-style protocol every pod runs: the source of membership, and a hint channel for capabilities, catalog and epoch heads, serving lag, and load
capability A format or feature a binary implements; usable only once the control role has enabled it cluster-wide
meta group The control role's cluster-wide Raft group: namespace registry, capabilities, origins, cluster settings, the maintenance lease
namespace group The Raft group of one namespace: its publisher, planner, table-writer, and dial-controller leases and their fencing counters
fencing epoch F A per-lease counter, Raft-committed and incremented when the holder changes. It appears in object names, and readers reject a lower one. Not the statistics epoch
generation G An immutable catalog version of one namespace, naming its segments and their liveness bitmaps
statistics epoch E(G) The statistics (N, field lengths, df) folded over generation G's segments (epochs)
G_chk The newest generation the dial controller has checked for drift
checked window W [G_chk − stats.max_serving_lag, G_chk]: the only epochs a node may serve from
serving epoch E(min(G_node, G_chk)); a node whose serving epoch leaves W stops answering (EPOCH_LAG)
features Statistics-free per-(campaign, article) values from which a score is computed at read time
campaign batch An immutable, content-addressed set of campaign revisions
cell (segment, campaign batch, analyzer, model) → match rows; the unit of matcher work
table generation T An immutable version of the match tables
hot match row m An article's by-article row of table generation T, copied into the KV plane
fresh tail The H1's in-memory index of documents not yet published
provisional match row n Features the H1 computed for a fresh-tail document; superseded by the published version's m row
floor F_c The score below which matches of campaign c are not stored
forecast F(a, W) Forecast impressions of article a over window W, used by impression dials
dial (α_c, τ_c) A campaign's fusion weight and serving cutoff; changing it needs no recomputation
τ_min(c) The lowest cutoff at which campaign c's served set is exact; dials never go below it
drift D_c An upper bound on how much any score of campaign c can have risen since its column was computed
placement, site, publisher The ad server's slot and the two grouping levels above it; request context and calibration hierarchy, never a filter
ad_action One pair-level ad event (impression or click) from the ad server's topic
ctr A pair's estimated click rate in a placement's context, in parts per 10⁹; it orders an answer, but the served set is decided on the raw score
WASM app, world A registered, content-addressed WebAssembly component, and the ysearch WIT interface it implements (extensions)
(A) Marks an assumed figure. Every size and cost in the specification is (A) until real volumes are known or YS4 measures it

Inherited engine terms

Storage and publication

Segment — The unit of immutability, publication, caching, placement, and compaction. One immutable WavesDB checkpoint plus its sidecars, in one object prefix. A segment is never modified after it is committed.

Commit marker — The segment.commit object. It is written only after the checkpoint, metadata, and sidecars are durable, which is what makes a partially uploaded segment invisible rather than corrupt.

Checkpoint — The WavesDB object set a segment's data lives in: a MANIFEST plus the table and blob objects of its column families.

Column family — One of the WavesDB families a segment is built from. The inherited nine are meta, terms, postings, positions, impact, filters, docvalues, vectors, and stored; format 7 adds stats, forward, and hashterms, and format 8 adds exact vector lanes. Each family has its own table files, even though all share one checkpoint and one commit.

Sidecar — A per-segment object outside WavesDB that supports routing and filtering: ids.bloom, ids.winners, ids.ordinals, terms.bloom, filters.postings.

Catalog — The authoritative record of what is visible. It holds an immutable generation lineage plus a compare-and-swap latest hint.

Generation — An immutable catalog record naming the complete active segment set. A query pins exactly one generation for its whole life.

latest — A hint object naming the current generation, updated by compare-and-swap. It is a hint, not the authority; the lineage under catalogs/generations/ is what a reader trusts.

Lineage — The parent-child chain of generations. When conflicting children of one parent appear, the lexicographically lowest generation ID wins and the losers' segments are carried onto it, which is recorded as a lineage repair rather than losing a document.

Announce — The step that makes a published segment visible, by writing a new generation that includes it.

Publication lag — The time from commit-marker durability to catalog-generation publication, measured by ysearch_publisher_publication_lag_seconds. The builder's own ysearch_builder_publication_lag_seconds measures from the first document spooled instead, so the two answer different questions.

Compaction — Physically merging several active segments into one and atomically replacing them. It writes a new segment and a new generation and retires its inputs; it never modifies a visible segment in place.

Retired — A segment no longer referenced by the active generation. Retired is not deleted: reclaiming the bytes is garbage collection's job.

GC dry run — A mark-only pass that proposes unreferenced objects against explicit retention horizons and publishes an immutable proposal record. It removes nothing.

Quarantine — Two different things. In garbage collection, the waiting period an immutable proposal must survive before a fresh mark may authorize deletion (gc.quarantine_age). In the cache, the state an entry enters when its content-addressed identity fails verification.

Identity

Logical key — The schema field marked key: true. It defines upsert identity: pushing the same key again stores a new version rather than replacing the old one.

Public ID — The deterministic 128-bit document identity used in result frames and tie ordering. Streamed as lowercase hex by search --ids.

Ordinal — A segment-local dense document number. Ordinals are how postings and docvalues address documents inside one segment; they mean nothing outside it.

Mutation version — The version number distinguishing copies of the same logical key. With query.collapse_key_versions on — the default — a query returns only the copy with the greatest mutation version.

Tombstone — The delete primitive. A key's current version is superseded by nothing, so it stops appearing in results. The bytes are not reclaimed until a later compaction merges away the segment holding the document.

Liveness bitmap — The per-generation record of which documents are the current winners, used to resolve versions and deletes at query time.

Storage modes and caching

Storage mode — Where an immutable reader gets checkpoint bytes: HYDRATE_FULL, REMOTE_BLOCKS, or AUTO. It never changes query semantics or the segment format.

HYDRATE_FULL — Requires a complete, verified local copy of every selected segment before executing against it.

REMOTE_BLOCKS — Opens stable readers over immutable object-store sources. Opens read table metadata; data blocks are fetched with bounded range requests on demand.

AUTO — Decides per segment. A verified full-cache hit executes locally; otherwise predicted request count, byte count, and scan fraction are weighed against measured remote latency and throughput.

Hydration — Downloading every object a segment's checkpoint names, verifying it against the commit, and atomically admitting the completed directory.

Full-segment cache — The verified content-addressed disk cache of complete segments, bounded by cache.full_bytes and cache.full_entries.

Block cache — The persistent decoded-block disk cache, bounded by cache.block_bytes and cache.block_entries. Consulted only for remote-block execution.

Read resources — The WavesDB in-process caches: decoded blocks, table readers, and file handles, bounded by the cache.read_* settings. Distinct from the disk caches and discarded on restart.

Scan bypass — A scan or readahead read may consult existing block-cache entries but does not admit new ones, so a one-off scan cannot evict a selective hot set.

Scrubber — The background pass that re-reads cached full segments and checks them against their commits. It is the only thing that notices a cached segment rotting on disk, because verifying costs the SHA-256 of every file in the segment and doing that per request would make a many-segment query spend all its time hashing.

Pinned — A cache entry currently in use, which eviction must not take.

Roles and topology

Role — One of eight behaviors a ysearch node process can serve. One binary; the --roles value decides what it does.

Role Does
coordinator Plans segment work units against the published catalog, dispatches them, and merges
worker Executes work units against segments; owns the disposable caches
merger A merge-tier node the coordinator delegates fan-in to
aggregator Holds soft cache-residency and capacity state for placement
router Admits ingest batches and routes them to builders
builder Spools, seals, builds, and publishes segments
publisher Holds the catalog lease and announces generations
compactor Maintenance only: physical merges and garbage collection

Role mix — The value of the role metric label. A process serving several roles reports them joined: role="builder-publisher".

Zone — The placement zone a node advertises in (server.zone). Aggregators are zone-local.

Work unit — One segment's share of a query, dispatched by a coordinator to a worker.

Placement — Choosing which worker executes a work unit, using cache-residency and capacity hints. Placement is never a correctness dependency: losing every aggregator degrades placement to a cache-oblivious tier and nothing else.

Hierarchical merge — Combining worker results through a tree of merge nodes rather than all at once, so fan-in and buffering stay bounded as segment count rises.

Bound propagation — Passing score bounds through the merge tree so subtrees can stop early without affecting the result.

Fan-in — Children per merge node in a coordinator's plan (fleet.fan_in).

Lane — The scheduling class of a query: interactive, streaming, or background. Worker slot pools are per lane (fleet.lane_slots).

Follower — The component in every node that watches latest and installs new generations. The follower.* settings govern its polling, overlap, and retirement behavior.

Generation window — The bounded period in which a worker may resolve a generation it has not seen through latest, controlled by follower.generation_overlap. Older unseen generations are refused.

Ingest

Spool — The on-disk accumulation of accepted documents before a build is sealed. Lives under ingest.dir.

Seal — Closing an open build so it can be built and published. Triggered by age, bytes, documents, an explicit flush, a schema change, or replay.

Admission — The router's decision to accept or refuse a batch, against ingest.global_queue_bytes, ingest.index_queue_bytes, and the optional rate quota.

Acknowledgement status — What a batch was told: accepted_ephemeral, throttled, rejected, or published. Only published means the documents are in a served generation.

Ephemeral acceptance — A batch accepted into the spool but not yet published. It is durable enough to be retried, not yet visible to a query.

Querying and ranking

Dialect — Which grammar a query string is parsed with: lucene or cqp.

Lowering — Turning a parsed query into the structured request the server executes. It happens client-side, so a typo lands a caret before any round trip.

BM25F — The ranking function, with per-field weights and b values declared in the schema.

Exactness — The scope of the result-ordering guarantee.

Value Meaning
GLOBAL_EXACT Exact ordering over the pinned generation
EXACT_WITHIN_CANDIDATES Exact ordering within the retrieved candidate set
APPROXIMATE Approximate ordering with a reported error bound

Exact prefix — The leading results ordered under the query's exactness class. top_k sets its requested size, from 1 up to the server limit of 100,000. A lower configured limit can apply.

Tail — The part of the result stream after the exact prefix. --tail exact requests exact ordering; --tail banded permits approximate ordering within a reported error bound.

Impact bands — Conservative per-term score-impact directories that make a bounded approximate tail possible. Persisted only when tail.impact_enabled is on; exact fallback does not require them.

Ordering error — The maximum score inversion a banded tail is allowed to contain. Zero requires exact fallback.

Collapse — Returning one hit per logical key, the copy with the greatest mutation version. On by default; --no-collapse returns every hit in rank order.

Projection — Asking for stored fields back with --fields. --keys projects only the schema key; --ids asks for no stored documents and no scores at all.

Vectors

Vector field — A schema field declared to carry an embedding. An index may have several.

IVF-PQ — The inherited approximate vector index: an inverted file of coarse centroids over product-quantized codes. ysearch replaces it with ivf_rabitq in YS16.

Probe — One coarse IVF list examined during candidate generation (vector.query_default_probes, --probes).

Candidate — A vector the ANN stage produced for exact reranking (vector.query_candidate_multiplier, --candidates).

Exact rerank — Scoring the candidate set against full-precision float32 vectors, which is what makes EXACT_WITHIN_CANDIDATES exact within its candidates.

Exhaustive — Scanning every covered vector instead of generating candidates (--exhaustive).

Fusion — Combining lexical and vector scores in a hybrid query: weighted or rrf, reciprocal rank fusion.

Embedding mode — Which provider produced a vector: internal (pure-Go, in-process), external (an OpenAI-compatible HTTP endpoint), or gRPC. The mode metric label carries the schema-selected one.

Truncation — A text longer than a model's token window being cut to fit. It is a real quality loss — the vector then represents only a prefix while BM25 still indexes the whole document — so it is counted by ysearch_embedding_truncated_texts_total rather than being silent.

Schemas and configuration

Schema — A protobuf message carrying ysearch.v1.document and ysearch.v1.field options. Field numbers are the field IDs the index keeps forever.

Additive change — A schema change that only adds. It mints the next version. Anything else is refused with a diff.

Indexed, stored, filterable — What the index does with a field: analyze it into the term dictionary, keep it for projection, or make it available to equality and range filters.

Setting — One entry in the configuration catalog, with a dotted key, a kind, a scope, a default, an environment variable, and usually a flag.

Scope — What may change at runtime: startup, node-runtime, or compile-time. Only node-runtime settings accept config set.

Provenance — The layer a setting's current value came from: default, file, environment, flag, or the runtime API. Reported by config get, config list, and config export.

Format version — The segment format a binary writes (format.segment_version) and the oldest it reads (format.minimum_reader_version). The Kubernetes operator gates upgrades on a declared read range and write format.

Process and delivery

WavesDB — The immutable segment storage engine ysearch builds on.

Receipt — A durable record of what a run measured, with the revision and inputs it was measured on. Receipts record milestone evidence, benchmark results, and vendored dependency manifests.

Milestone — One numbered phase of the implementation roadmap (YS0–YS17 and YS8a; M0–M8 are yolosearch's history), with an entry gate, deliverables, and an exit gate. A milestone is not closed until its exit gate has a receipt.

Next