TL;DR: SQLite FTS5 ist in D1 verfügbar und liefert Full-Text-Search ohne externe Suchdienste. Dieser Guide deckt die FTS5-Virtual-Table-Erstellung, Such-Queries mit Ranking, das Hervorheben von Ergebnissen und die Integration in Server Functions ab.
Einleitung
Suche ist ein Kernfeature der meisten Anwendungen. Sie könnten Algolia oder Meilisearch nutzen, aber D1s FTS5-Erweiterung liefert brauchbares Full-Text-Search ohne zusätzliche Infrastruktur oder Kosten. Für die meisten SaaS-Anwendungen mit Millionen Dokumenten reicht FTS5 aus. Um Ihre D1-Queries neben FTS5 zu optimieren, sehen Sie sich unseren Cloudflare D1 Query Optimization-Guide an.
FTS5 Virtual Table
-- Create FTS5 index on blog posts
CREATE VIRTUAL TABLE posts_fts USING fts5(
title,
content,
excerpt,
content='posts',
content_rowid='id',
tokenize='porter unicode61'
);
-- Populate the index
INSERT INTO posts_fts(rowid, title, content, excerpt)
SELECT id, title, content, excerpt FROM posts;
Such-Query
-- Full-text search with ranking
SELECT p.id, p.title, p.excerpt,
rank AS relevance
FROM posts_fts
JOIN posts p ON posts_fts.rowid = p.id
WHERE posts_fts MATCH ?
ORDER BY rank DESC
LIMIT 20;
Server-Function-Integration
export const searchPostsFn = createServerFn({ method: 'GET' })
.validator(z.object({ query: z.string().min(1) }))
.handler(async ({ data }) => {
const results = await db
.selectFrom('posts_fts')
.innerJoin('posts', 'posts_fts.rowid', 'posts.id')
.where('posts_fts', 'match', data.query)
.orderBy('rank', 'desc')
.limit(20)
.execute()
return { results }
})
FTS5 Features
| Feature | Syntax | Beschreibung |
|---|---|---|
| Präfixsuche | tan* | Präfix treffen |
| Phrasensuche | "cloudflare workers" | Exakte Phrase |
| Boolesche Operatoren | tanstack AND drizzle | Begriffe kombinieren |
| Spaltenspezifisch | title:tanstack | Bestimmte Spalte durchsuchen |
| NEAR-Operator | NEAR(query, router, 5) | Nähe-Suche |
Fazit
FTS5 in D1 liefert produktionsreifes Full-Text-Search ohne externe Dienste. Für die meisten SaaS-Anwendungen ist es eine kosteneffiziente Alternative zu dedizierten Suchplattformen. Für ein tieferes Verständnis von D1 in der Produktion sehen Sie sich unseren Cloudflare D1 Production Guide an. Und für einen kompletten Suchdienst auf D1: Build a Search-as-a-Service with D1.