
From clusters to taxonomies: embed, cluster, label, promote — then the taxonomy classifies new documents at ingest, powers filters at query time, and reclassifies retroactively when nodes change.
Taxonomy Types
Each node references a collection, retriever, and list of enrichment fields. Child nodes inherit parent properties automatically.
Flat Taxonomy: Product Catalog Recognition
Hierarchical Taxonomy: Media Content Classification
Execution Modes
A taxonomy runs one of three ways, each through its own surface, not a sharedmode field:
taxonomy_applications[].execution_mode only accepts materialize; the other two modes are not values of this field. See Application Methods below for each mode’s request shape.
How Hierarchical Taxonomies Execute
Hierarchical taxonomies are executed like Common Table Expressions (CTEs) in SQL—each level builds on the results of the previous level, creating a recursive evaluation chain from root to leaf nodes.- Documents that matched the parent node are passed down
- The child node’s retriever executes against its reference collection
- Enrichment fields from matching nodes are accumulated
- Only documents exceeding the similarity threshold continue to child nodes
Application Methods
Hierarchical taxonomies can be applied through three methods:
On-demand enrichment adds a
taxonomy_enrich stage to your retriever pipeline:
taxonomy_applications:
- You’ve updated a taxonomy and need to reclassify existing documents
- You’re migrating from a flat taxonomy to a hierarchical one
- You’ve added new reference data to taxonomy collections
Internals: JOIN Stage
Taxonomies reuse thejoin@v1 stage under the hood:
- Direct join – key-based match (
join_type: "direct"). - Retriever join – similarity match using a nested retriever (
join_type: "retriever"). - Join strategies –
replace,enrich,left, orappendcontrol how fields merge.
asyncio.gather) makes retrieval joins 10–50× faster than sequential lookups.
Create a Flat Taxonomy
Onlytaxonomy_name and config are required at the top level. Everything that
describes the taxonomy goes inside config.
retriever_id and input_mappings are required for a flat taxonomy.
input_mappings maps a retriever input key to where the value comes from.
Each entry is { input_key, source_type, path }. input_key must be a key the
retriever’s own input_schema declares. Use path as a dot-path for
payload and vector sources, and override to pass a static value for
literal.It does not take a feature URI. A feature_uri identifies a vector index,
not an input source.Create a Hierarchical Taxonomy
A hierarchy is a flat list, not nested JSON. Nodes never contain child
nodes. Each node names its parent with
parent_collection_id, null marks a
root, and the tree is rebuilt from those pointers. Order does not matter.collection_id is the only required field on a node, and it identifies the
node. There is no separate node id.On a hierarchical taxonomy, retriever_id and input_mappings are optional at
the config level and can be set per node. You can also let Mixpeek infer the
shape with inference_strategy (schema, cluster, or llm) plus
inference_collections, instead of listing nodes by hand.Attach to a Collection
taxonomy_applications[].execution_mode only accepts materialize. To attach a taxonomy for materialized enrichment:
taxonomy_enrich stage to a retriever instead (see Application Methods above); do not put the taxonomy in taxonomy_applications.
Test On Demand
taxonomy_enrich is an apply-category stage: it enriches documents already flowing through the retriever, so it needs a document-producing stage (for example feature_search) before it in the pipeline, not a standalone call. Add it to a retriever as shown under Application Methods above, then run POST /v1/retrievers/{retriever_id}/execute.
Inference Strategies
- Manual – Define nodes explicitly (IDs, collections, retrievers).
- Schema-based – Infer nodes from existing collection schemas (planned).
- Cluster-based – Create nodes from clustering output.
- LLM-based – Generate hierarchical structure from sample documents.
Monitoring
- List taxonomies:
POST /v1/taxonomies/list - Inspect hierarchy and node metadata:
GET /v1/taxonomies/{id}?expand_nodes=true - Track materialized enrichment progress via webhook events (
collection.documents.written) - Use retriever analytics to ensure taxonomy stages don’t dominate latency.
Best Practices
- Start flat for quick wins; layer hierarchies once value is proven.
- Keep enrichment minimal—copy only fields needed at query time.
- Cache taxonomy stages in retrievers when reference collections rarely change.
- Version taxonomies (via snapshots) before major structural changes.
- Combine with clusters to discover candidate nodes and measure coverage.

