Skip to main content
Sort By Field stage showing attribute-based document ordering
The Sort By Field stage reorders documents based on metadata field values. It supports ascending/descending order, nested fields, and multiple sort criteria.
Stage Category: SORT (Reorders documents)Transformation: N documents → N documents (reordered by field value)

When to Use

Use CaseDescription
Price sortingOrder products by price
Recency sortingMost recent first
Rating sortingHighest rated first
AlphabeticalSort by name or title
Custom rankingSort by any numeric field

When NOT to Use

ScenarioRecommended Alternative
Relevance rankingrerank (neural re-scoring)
Complex scoring logicapi_call to custom service
Already sorted by searchSkip this stage

Parameters

ParameterTypeDefaultDescription
sort_fieldstringRequiredField path to sort by
orderstringdescSort direction: asc or desc
null_handlingstringlastWhere to place nulls: first, last

Configuration Examples

{
  "stage_type": "sort",
  "stage_id": "sort_by_field",
  "parameters": {
    "sort_field": "metadata.price",
    "order": "asc"
  }
}

Field Types

The stage handles various field types:
TypeSort Behavior
NumberNumeric comparison
StringLexicographic (alphabetical)
Date/ISO8601Chronological
Booleanfalse < true

Null Handling

SettingBehavior
firstNull/missing values appear first
lastNull/missing values appear last (default)
{
  "sort_field": "metadata.optional_field",
  "order": "desc",
  "null_handling": "last"
}

Performance

MetricValue
Latency< 5ms
ComplexityO(n log n)
MemoryIn-place sort
Index supportUses indexes when available
Sorting is very fast. Unlike rerank, it doesn’t require model inference, making it ideal for simple ordering by attributes.

Common Pipeline Patterns

Search + Filter + Sort

[
  {
    "stage_type": "filter",
    "stage_id": "semantic_search",
    "parameters": {
      "query": "{{INPUT.query}}",
      "vector_index": "text_extractor_v1_embedding",
      "top_k": 50
    }
  },
  {
    "stage_type": "filter",
    "stage_id": "structured_filter",
    "parameters": {
      "conditions": {
        "field": "metadata.in_stock",
        "operator": "eq",
        "value": true
      }
    }
  },
  {
    "stage_type": "sort",
    "stage_id": "sort_by_field",
    "parameters": {
      "sort_field": "metadata.price",
      "order": "asc"
    }
  },
  {
    "stage_type": "reduce",
    "stage_id": "limit",
    "parameters": {
      "limit": 10
    }
  }
]

Rerank + Sort (Tie-Breaking)

[
  {
    "stage_type": "filter",
    "stage_id": "hybrid_search",
    "parameters": {
      "query": "{{INPUT.query}}",
      "vector_index": "text_extractor_v1_embedding",
      "top_k": 100
    }
  },
  {
    "stage_type": "sort",
    "stage_id": "rerank",
    "parameters": {
      "model": "bge-reranker-v2-m3",
      "top_n": 20
    }
  },
  {
    "stage_type": "sort",
    "stage_id": "sort_by_field",
    "parameters": {
      "sort_field": "metadata.created_at",
      "order": "desc"
    }
  }
]

Dynamic Sort Direction

[
  {
    "stage_type": "filter",
    "stage_id": "semantic_search",
    "parameters": {
      "query": "{{INPUT.query}}",
      "vector_index": "text_extractor_v1_embedding",
      "top_k": 100
    }
  },
  {
    "stage_type": "sort",
    "stage_id": "sort_by_field",
    "parameters": {
      "sort_field": "{{INPUT.sort_by}}",
      "order": "{{INPUT.sort_order}}"
    }
  }
]

Comparison: sort_by_field vs rerank

Featuresort_by_fieldrerank
Based onField valuesQuery relevance
Speed< 5ms50-100ms
Model requiredNoYes
Use caseAttribute orderingRelevance scoring
CostFreeAPI calls

Multiple Sort Criteria

For multi-field sorting, chain multiple sort stages (last sort is primary):
[
  {
    "stage_type": "sort",
    "stage_id": "sort_by_field",
    "parameters": {
      "sort_field": "metadata.created_at",
      "order": "desc"
    }
  },
  {
    "stage_type": "sort",
    "stage_id": "sort_by_field",
    "parameters": {
      "sort_field": "metadata.featured",
      "order": "desc"
    }
  }
]
This sorts by featured first, then by created_at for ties.

Error Handling

ErrorBehavior
Field not foundTreated as null
Type mismatchString comparison fallback
Invalid orderDefaults to desc