AppView in a box as a Vite plugin thing hatk.dev

title: Search description: Search API endpoints.#

dev.hatk.searchRecords#

Full-text search across a collection using SQLite FTS5 with BM25 ranking.

  • Type: Query (GET)
  • Auth: None

Parameters#

Name Type Required Default Description
collection string Yes Collection NSID to search
q string Yes Search query
limit integer No 20 Results per page (1–100)
cursor string No Pagination cursor
fuzzy boolean No true Enable fuzzy matching

Example#

curl "http://127.0.0.1:3000/xrpc/dev.hatk.searchRecords?collection=fm.teal.alpha.feed.play&q=radiohead"
import { callXrpc } from "$hatk/client";

const { items, cursor } = await callXrpc("dev.hatk.searchRecords", {
  collection: "fm.teal.alpha.feed.play",
  q: "radiohead",
});

Response#

{
  "items": [ ... ],
  "cursor": "..."
}

How it works#

Hatk builds a SQLite FTS5 full-text search index for each collection. String fields in your record lexicon definitions are automatically included in the index, which uses incremental updates so new records become searchable immediately.

Search uses BM25 ranking to order results by relevance. The fuzzy parameter (enabled by default) allows approximate matching for typos and partial terms.