query.nearest_exact
Nearest-neighbour order on a vector too long for an index reads every record.
Area 21, AI; declinable; the next step is usually the agent's.
nearest on a vector type of over 4,000 dimensions. pgvector's HNSW
index holds at most 4,000, at half precision, so the query reads and
measures every record on each call. It is declinable: for a table small
enough to read in full, a decline above the query's order: accepts the
cost, and the query searches exactly.
/// A paper's meaning, as the research team's own model makes it.type PaperMeaning = Vector { dimensions: 5000}/// A research paper, with its meaning once it is embedded.entity Paper { id: Uuid abstract_meaning: PaperMeaning?}/// The ten papers nearest a question.query closest_papers(question_meaning: PaperMeaning) -> List<Nearest<Paper>> { from: Paper order: [Paper.abstract_meaning nearest question_meaning] limit: 10}
error Paper.abstract_meaning is too long to index, so nearest reads every Paper
--> main.jadpo:15:13
|15 | order: [Paper.abstract_meaning nearest question_meaning] | ^^^^^^^^^^^^^^^^^^^^^^ 5,000 dimensions
- reason
- pgvector's HNSW index takes a vector of up to 4,000 dimensions, at half precision, and
PaperMeaninghas 5,000; with no index, each call measures the distance to everyPaperwhoseabstract_meaningis set and sorts them all, which slows as the table grows. - next
- Give
PaperMeaningat most 4,000dimensions:, asking the model for fewer withembedding_dimensions:, or writedecline query.nearest_exact: "<why>"above it if this is deliberate (agent) - rule
- query.
nearest_ exact - help
- https://jadpo.
dev/docs/errors/query. nearest_ exact
Declined, it checks, and runs as one statement:
/// A paper's meaning, as the research team's own model makes it.type PaperMeaning = Vector { dimensions: 5000}/// A research paper, with its meaning once it is embedded.entity Paper { id: Uuid abstract_meaning: PaperMeaning?}/// The ten papers nearest a question.query closest_papers(question_meaning: PaperMeaning) -> List<Nearest<Paper>> { from: Paper decline query.nearest_exact: "Under a thousand papers, read in full in a few milliseconds" order: [Paper.abstract_meaning nearest question_meaning] limit: 10}
SELECT "id", "abstract_meaning", "abstract_meaning" <=> $1 AS "jadpo_distance"FROM "paper"WHERE "abstract_meaning" IS NOT NULLORDER BY "jadpo_distance", "id"LIMIT 10
Markdown for agents: /docs/errors/query.nearest_exact.md.Built from Jadpo main at aee2e8f.