Search & metadata

Sorting results

Order Typesense results with sort_by.

The sort_by parameter controls the order of your search results. You can sort by any field in ascending or descending order, and combine up to three fields for multi-level sorting.

Quick start

Here’s how to sort transactions by creation date in descending order (newest first):

curl -X POST "http://localhost:5001/search/transactions" \
  -H "X-blnk-key: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "q": "*",
    "sort_by": "created_at:desc"
  }'
const response = await blnk.Search.search(
  {
    q: "*",
    sort_by: "created_at:desc",
  },
  'transactions',
);
results, _, _ := client.Search.SearchDocument(
    blnkgo.SearchParams{Q: "*", SortBy: "created_at:desc"},
    blnkgo.Transactions,
)
response = blnk.search.search(
  {
    "q": "*",
    "sort_by": "created_at:desc",
  },
  "transactions",
)
ApiResponse<JsonNode> response = blnk.search().search(
    SearchParams.create()
        .q("*")
        .sortBy("created_at:desc"),
    "transactions");

Sort syntax

Basic sorting

Sort by a single field using the format field:direction:

# Sort by amount (lowest to highest)
"sort_by": "amount:asc"

# Sort by creation date (newest to oldest)
"sort_by": "created_at:desc"

Sort directions

DirectionDescriptionExample
ascAscending order (A-Z, 0-9, oldest to newest)amount:asc
descDescending order (Z-A, 9-0, newest to oldest)created_at:desc

Multi-field sorting

Combine up to three fields separated by commas. Fields are applied in order: the first field is primary, second breaks ties, third breaks remaining ties:

curl -X POST "http://localhost:5001/search/transactions" \
  -H "X-blnk-key: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "q": "*",
    "sort_by": "status:asc,created_at:desc,amount:desc"
  }'
const response = await blnk.Search.search(
  {
    q: "*",
    sort_by: "status:asc,created_at:desc,amount:desc",
  },
  'transactions',
);
results, _, _ := client.Search.SearchDocument(
    blnkgo.SearchParams{Q: "*", SortBy: "status:asc,created_at:desc,amount:desc"},
    blnkgo.Transactions,
)
response = blnk.search.search(
  {
    "q": "*",
    "sort_by": "status:asc,created_at:desc,amount:desc",
  },
  "transactions",
)
ApiResponse<JsonNode> response = blnk.search().search(
    SearchParams.create()
        .q("*")
        .sortBy("status:asc,created_at:desc,amount:desc"),
    "transactions");

This sorts by:

  1. Status (ascending) - groups by status first
  2. Created date (descending) - within each status, newest first
  3. Amount (descending) - for same status and date, highest amount first

Common sorting patterns

Sort by creation date

Show the most recent records first, useful for transaction monitoring.

curl -X POST "http://localhost:5001/search/transactions" \
  -H "X-blnk-key: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "q": "*",
    "sort_by": "created_at:desc"
  }'
const response = await blnk.Search.search(
  {
    q: "*",
    sort_by: "created_at:desc",
  },
  'transactions',
);
results, _, _ := client.Search.SearchDocument(
    blnkgo.SearchParams{Q: "*", SortBy: "created_at:desc"},
    blnkgo.Transactions,
)
response = blnk.search.search(
  {
    "q": "*",
    "sort_by": "created_at:desc",
  },
  "transactions",
)
ApiResponse<JsonNode> response = blnk.search().search(
    SearchParams.create()
        .q("*")
        .sortBy("created_at:desc"),
    "transactions");

Sort by amount

Find the largest transactions first for financial analysis.

curl -X POST "http://localhost:5001/search/transactions" \
  -H "X-blnk-key: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "q": "*",
    "sort_by": "amount:desc"
  }'
const response = await blnk.Search.search(
  {
    q: "*",
    sort_by: "amount:desc",
  },
  'transactions',
);
results, _, _ := client.Search.SearchDocument(
    blnkgo.SearchParams{Q: "*", SortBy: "amount:desc"},
    blnkgo.Transactions,
)
response = blnk.search.search(
  {
    "q": "*",
    "sort_by": "amount:desc",
  },
  "transactions",
)
ApiResponse<JsonNode> response = blnk.search().search(
    SearchParams.create()
        .q("*")
        .sortBy("amount:desc"),
    "transactions");

Best practices

  • Default to newest first: Use created_at:desc for time-sensitive data like transactions.
  • Combine with filtering: Sort filtered results for more targeted analysis.
  • Limit multi-field sorting: Use 2-3 fields maximum to avoid complexity.