elips/docs
Concepts

Core concepts

ELIPS uses five nouns: engine, vault, record, document, and lineage. They map directly to types in both the C++ and Python surfaces.

ElipsInstancelifecycle · config · WALVault: documentsVault: facesIndexPortgraph / exact / gpurecord storeMetadataIndexPlannerRecordid · vectorpayloaddocument?chunk?lineage?one process · one writer
The object model. Each engine owns vaults; each vault owns an index and a record store.

Engine

ElipsInstance (Python: Database / Engine) is the database handle. It owns the configured text embedder, the vault registry, the WAL, and any optional GPU device state. It is created by open() / connect() and is non-copyable.

Vault

A vault is a named partition. Inside a vault, ids are unique, and records share the database's dimension and metric. A vault owns exactly one index instance (behind IndexPort) plus its metadata index and planner.

python
docs = engine.arena("documents")
faces = engine.arena("faces")

Record

The record is the unit of storage. Every field except id and vector is optional:

cpp
struct Record {
  RecordID id;
  Vector   vector;
  Payload  payload;                                 // typed metadata
  std::optional<DocumentAttachment> document;       // raw text + uri + mime
  std::optional<ChunkInfo>          chunk;          // document key + position
  std::optional<EmbeddingLineage>   lineage;        // provider · model · revision
};

Documents & lineage

DocumentAttachment stores the original text and optional URI/MIME. ChunkInfo records where the record sits inside a larger document. EmbeddingLineage records which embedder produced the vector, so future migrations or audits can reason about provenance. All three are persisted by WAL::insert_ex and replayed on recovery.

Filters

Filter is a value-typed predicate tree. The same object is built by the fluent builder and by the EQL parser; the executor cannot tell which produced it. Equality and set-membership predicates accelerate through MetadataIndex; other comparators evaluate during the scan.

python
f = (elips.Filter()
     .field("kind").equals("design")
     .and_().field("year").greater_than(2023))

Query plan

Every vector or hybrid query first goes through Vault::plan_seek(). The result is a QueryPlan that names the strategy (ann_index, exact_candidates, full_scan, text_probe, or hybrid_fusion), whether MetadataIndex was used, and the candidate count when relevant. The plan is exposed in both surfaces — see Advanced patterns.