Zenith Logic Foundry

Database: Retrieval

zlf layers four retrieval capabilities over the graph, all selected through an IndexProfile.

BM25

Full-text search via Tantivy with a pinned contract (k1=1.2, b=0.75, analyzer unicode_jieba_v1):

? bm25("software engineer", Node, Score).

Only fields selected by an active profile are indexed.

Code retrieval

Symbol BM25 plus bounded graph composition over ingested repositories. No vector embedding required. The code_symbol analyzer does identifier-boundary subtokenization only (no ngram/fuzzy):

? code_search("Dispatcher", 10, Symbol).
? code_callers(Symbol, Caller, 8, Status).
? code_callees(Symbol, Callee, 8, Status).
? code_path(From, To, Path, Rank, Status).
? code_cycle(Symbol, Cycle, Status).

Status is ok or exhausted(budget) — every request carries finite budgets and exhaustion is explicit.

Ordinary Prolog joins compose with code facts:

? code_symbol(S), prop_simple_name(S, "main"), code_calls(S, T).

The same CodeQuery AST backs both Prolog predicates and JSON/HTTP. See the full code indexing guide.

Vector similarity

Optional embedding retrieval. Disabled by default; enable embedding.enabled=true to use it.

? vector_similar(alice, Node, Score).

Temporal

? temporal_on("2026-07-15", Node).
? temporal_between("2026-07-01", "2026-08-01", Node).
? valid_at("2026-07-15T00:00:00Z", Node).
? valid_overlaps("2026-07-01T00:00:00Z", "2026-08-01T00:00:00Z", Node).

A field may be declared an event instant, validity start (valid_from), or validity end (valid_to); valid_to requires valid_from. Node versions carry the timestamps that temporal queries read.