Anchors
The two things a clause can point at — natural language text, or a raw embedding vector.
Every clause is anchored to a point in embedding space. An anchor is either a string, which the host embeds for you, or an array of numbers, which is already an embedding.
MATCH DISTANCE("payment reconciliation failure") WITHIN 0.8
MATCH DISTANCE([0.182, -0.041, 0.389, 0.057]) TOP 10
Text anchors
A quoted string. The host embeds it with whatever model it uses, and compares the result against stored embeddings produced by the same model.
This is the right default. It survives a model upgrade — the host re-embeds both sides — and it says what you meant in a form the next reader can check.
Write anchors as phrases, not keywords. "payment reconciliation failure"
lands somewhere specific; "payment" lands in the middle of an enormous, vague
neighbourhood. Anchors are not search terms and do not benefit from being short.
Vector anchors
An array of numbers, taken as an embedding directly and used without modification.
The dimensionality must match the host's model, and so must the model itself: a vector produced by one embedding model is meaningless to another, even at the same dimensionality. There is nothing in the vector that records where it came from, so a mismatch does not fail — it returns confident nonsense.
That makes a stored vector anchor a latent dependency on a model version. If the host upgrades its embedder, every text anchor follows and every hardcoded vector silently stops meaning what it meant.
Use vector anchors when you have computed a point that no phrase describes — a cluster centroid, an averaged exemplar set, a point arrived at by arithmetic. Otherwise use text.
Anchor lists
DIRECTION and CONTRAST take lists:
anchor_list = "[" anchor { "," anchor } "]"
| anchor ;
A single anchor may be written without brackets. Multiple anchors are averaged,
not unioned — see DIRECTION for what that implies.
Limits
A vector literal holds at most 4096 elements, a query holds at most 32 anchors in total, and each individual list holds at most 8. String data across a whole query is capped at 4096 bytes. See limits for the full table.