AACSearch
Erste Schritte

Schnellstart

Index anlegen, Schlüssel erzeugen, Dokumente laden und die erste Suche ausführen — durchgehend mit curl.

Start in der Konsole

Nach der E-Mail-Bestätigung wählen Sie Website-Suche oder Suche per API. Benennen Sie die Suche; der erste Arbeitsbereich wird dabei erstellt. Der Assistent führt durch Daten → Prüfen → Verbinden. Dateivorschau, Feldzuordnung und CMS-Anbindung stehen für Websites bereit; Entwickler erhalten einen begrenzten Server-Schlüssel und passende Anfragen. Ein Schlüssel oder kopierter Code bestätigt noch keine Installation. Führen Sie eine Vorschau und anschließend eine externe Suche aus. Die Einrichtung lässt sich später fortsetzen.

Für dieses Beispiel benötigen Sie ein Konsolenkonto mit Organisation und Zugriff auf die AACSearch-API.

1. Index anlegen

Indizes entstehen in der Konsole: Search → Indexes → New index. Vergeben Sie einen Namen, optional einen Slug (wird sonst aus dem Namen gebildet und bei Kollision mit -2, -3 ergänzt) und, falls die Standardfelder nicht reichen, ein Schema.

Für einen reinen Dokumentationsindex sind keine Zusatzfelder nötig. Ein Produktindex deklariert meist, wonach gefiltert wird:

{
	"name": "Documentation",
	"slug": "documentation",
	"fields": [
		{ "name": "category", "type": "string", "facet": true },
		{ "name": "published_at", "type": "int64", "sort": true },
		{ "name": "views", "type": "int32", "optional": true }
	]
}

Die Konsole validiert dieses Schema und erstellt einen verwalteten Index. API-Anfragen verwenden dessen logischen Slug:

{
	"id": "idx_01HZX8",
	"slug": "documentation",
	"name": "Documentation"
}

Feldnamen müssen ^[a-zA-Z_][a-zA-Z0-9_]{0,63}$ erfüllen und dürfen die reservierten Namen nicht überschreiben (id, external_id, title, content, url, source_type, organization_id, tags, indexed_at, metadata).

2. API-Schlüssel erzeugen

Search → API keys → New key. Wählen Sie die Scopes. Das Standard-Set — search:read, documents:read, documents:write — genügt für einen Ingest-Job. Ergänzen Sie settings:write für Reindex und eingeschränkte Schlüssel, analytics:write für Klick-Tracking.

Der Schlüssel wird genau einmal zurückgegeben:

{
	"id": "key_01HZX9",
	"name": "Ingest",
	"prefix": "aac_live_9f3c2a1b…",
	"scopes": ["search:read", "documents:read", "documents:write"],
	"createdAt": "2026-10-23T09:12:44.000Z",
	"key": "aac_live_9f3c2a1bD4eF6gH8iJ0kL2mN4oP6qR8s"
}

Organisationen in Produktion erhalten aac_live_…, außerhalb der Produktion wird aac_test_… erzeugt. Gespeichert wird nur der SHA-256-Hash — geht der Schlüssel verloren, widerrufen Sie ihn und legen einen neuen an.

Einmal für die folgenden Befehle exportieren:

export AAC_KEY="aac_live_9f3c2a1bD4eF6gH8iJ0kL2mN4oP6qR8s"
export AAC_API="https://search.example.com/api/v1"

3. Dokumente laden

external_id und content sind Pflicht, alles andere optional. Felder Ihres Schemas werden als normale Top-Level-Schlüssel durchgereicht.

curl -sS -X POST "$AAC_API/indexes/documentation/documents" \
  -H "Authorization: Bearer $AAC_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "documents": [
      {
        "external_id": "pricing",
        "title": "Preise",
        "content": "Free umfasst 10.000 Suchen pro Monat. Pro kostet 29 USD im Monat und enthält 500.000 Suchen.",
        "url": "https://example.com/pricing",
        "tags": ["billing"]
      },
      {
        "external_id": "limits",
        "title": "Rate-Limits",
        "content": "Ein API-Schlüssel erlaubt 600 Requests pro Minute in einem gleitenden Fenster.",
        "url": "https://example.com/limits",
        "tags": ["api"]
      }
    ],
    "action": "upsert"
  }'
{
	"index": "documentation",
	"indexed": 2,
	"failed": [],
	"usage": {
		"plan": "pro",
		"planName": "Pro",
		"period": "2026-10",
		"resetsAt": "2026-11-01T00:00:00.000Z",
		"searches": { "used": 0, "limit": 500000 },
		"documents": { "used": 2, "limit": 50000 },
		"aiTokens": { "used": 0, "limit": 100000 },
		"indexes": { "used": 1, "limit": 10 },
		"apiKeys": { "used": 1, "limit": 10 },
		"connectors": { "used": 0, "limit": 10 },
		"wallet": { "balanceCents": 0, "currency": "USD" }
	},
	"request_id": "req_5b1d9c0a7e2f4a6b8c0d1e2f"
}

Ein Batch ist nicht alles-oder-nichts: abgelehnte Dokumente erscheinen in failed als { "external_id", "error" }, der Rest wird indiziert. Maximal 500 Dokumente pro Request.

4. Erste Suche

curl -sS -G "$AAC_API/indexes/documentation/search" \
  -H "Authorization: Bearer $AAC_KEY" \
  --data-urlencode "q=preise" \
  --data-urlencode "query_by=title,content" \
  --data-urlencode "per_page=5"
{
	"index": "documentation",
	"query": "preise",
	"language": "de",
	"found": 1,
	"out_of": 2,
	"page": 1,
	"per_page": 5,
	"took_ms": 12,
	"engine_ms": 3,
	"hits": [
		{
			"id": "pricing",
			"score": 1754,
			"document": {
				"id": "pricing",
				"external_id": "pricing",
				"title": "Preise",
				"content": "Free umfasst 10.000 Suchen pro Monat. Pro kostet 29 USD im Monat …",
				"url": "https://example.com/pricing",
				"source_type": "api",
				"organization_id": "org_01h9",
				"tags": ["billing"],
				"indexed_at": 1761214364
			},
			"highlights": [
				{ "field": "title", "snippet": "<mark>Preise</mark>", "matchedTokens": ["preise"] }
			]
		}
	],
	"facets": [],
	"request_id": "req_9a7c3d1e5f0b2a4c6d8e0f1a"
}

Die Response-Header liefern die Zahlen für Backoff und Monitoring:

x-aac-quota-limit: 500000
x-aac-quota-remaining: 499999
x-aac-index: documentation
x-aac-profile: default
x-aac-charged-cents: 0
x-ratelimit-limit: 600
x-ratelimit-remaining: 599
x-ratelimit-reset: 1761214424
x-request-id: req_9a7c3d1e5f0b2a4c6d8e0f1a

Eine Suche ohne Treffer ist trotzdem erfolgreich (found: 0); sie wird als Null-Ergebnis-Abfrage protokolliert und taucht in /analytics/alerts auf.

5. Autocomplete ergänzen

curl -sS -G "$AAC_API/indexes/documentation/suggest" \
  -H "Authorization: Bearer $AAC_KEY" \
  --data-urlencode "q=pre" \
  --data-urlencode "limit=5"
{
	"index": "documentation",
	"query": "pre",
	"suggestions": [
		{
			"text": "Preise",
			"source": "document",
			"documentId": "pricing",
			"url": "https://example.com/pricing",
			"score": 3,
			"highlight": "<mark>Pre</mark>ise"
		}
	],
	"did_you_mean": null,
	"sources": { "documents": 1, "queries": 0 },
	"cache": "miss",
	"request_id": "req_1c2d3e4f5a6b7c8d9e0f1a2b"
}

Suggest-Aufrufe unterliegen dem Rate-Limit, werden aber nie abgerechnet — eine Autovervollständigung, die jeden Tastendruck kostet, wäre unbrauchbar.

Wie es weitergeht

On this page