AACsearch
SDKs

Python SDK

Installieren und verwenden Sie das aacsearch Python SDK für Suche, Index-Verwaltung, Synonyme, Kuratierungen und Analysen.

Python SDK (aacsearch)

Das Python-Paket aacsearch stellt zwei Clients bereit:

ClientBereichSchlüssel-PräfixAnwendungsfall
SearchClientNur Suchess_search_*Öffentliche Suche aus Backend-Skripten
AdminClientVollzugriffaa_admin_*Serverseitige Verwaltung, CI/CD

Installation

Erfordert Python 3.9+.

pip install aacsearch

Schnellstart

SearchClient (öffentlich)

Verwenden Sie einen Suchbereich-API-Schlüssel (ss_search_*) oder ein eingeschränktes Token (ss_scoped_*).

from aacsearch import SearchClient

client = SearchClient(
    base_url="https://app.aacsearch.com",
    api_key="ss_search_your_key_here",
    index_slug="products",
)

# Einfache Suche
results = client.search(q="laptop")
print(f"Found {results['found']} results")

# Suche mit Filtern und Facetten
results = client.search(
    q="phone",
    filter_by="price:<=500",
    facet_by="brand,category",
    sort_by="price:asc",
    per_page=20,
)

# Multi-Suche (mehrere Abfragen in einer Anfrage)
combined = client.multi_search([
    {"q": "laptop", "perPage": 5},
    {"q": "phone", "perPage": 5},
])

AdminClient (serverseitig)

Verwenden Sie einen Adminbereich-API-Schlüssel (aa_admin_*). Admin-Schlüssel niemals in Browser-Code einbetten.

from aacsearch import AdminClient

admin = AdminClient(
    base_url="https://app.aacsearch.com",
    api_key="aa_admin_your_key_here",
    project_id="org_xxx",
)

Index-Verwaltung

# Einen Index erstellen
index = admin.create_index(
    slug="products",
    display_name="Products",
    fields=[
        {"name": "title", "type": "string"},
        {"name": "description", "type": "string"},
        {"name": "price", "type": "float", "sort": True},
        {"name": "brand", "type": "string", "facet": True},
        {"name": "category", "type": "string[]", "facet": True},
    ],
    default_sorting_field="price",
)
print(f"Created index: {index['id']}")

# Alle Indizes auflisten
indexes = admin.list_indexes()

Dokumenten-Operationen

# Ein einzelnes Dokument einfügen/aktualisieren
admin.upsert_document(
    index_id=index["id"],
    document_id="doc_001",
    document={
        "title": "MacBook Pro 16\"",
        "description": "Apple M3 Pro chip, 18GB RAM",
        "price": 2499.00,
        "brand": "Apple",
        "category": ["Laptops", "Apple"],
    },
)

# Batch einfügen/aktualisieren (bis zu 5000)
admin.batch_upsert_documents(
    index_id=index["id"],
    documents=[
        {"id": "doc_002", "title": "iPhone 15 Pro", "price": 1199.00, "brand": "Apple"},
        {"id": "doc_003", "title": "Galaxy S24", "price": 999.00, "brand": "Samsung"},
    ],
)

Synonyme

admin.upsert_synonyms(
    index_id=index["id"],
    synonyms=[
        {"root": "laptop", "synonym": "notebook"},
        {"root": "laptop", "synonym": "ultrabook"},
        {"root": "phone", "synonym": "smartphone"},
    ],
)

Kuratierungen

admin.upsert_curations(
    index_id=index["id"],
    curations=[
        {"query": "macbook", "pinnedIds": ["doc_001"]},
    ],
)

Analysen & Nutzung

# 7-Tage-Analysen
analytics = admin.get_analytics(period="7d")

# 30-Tage-Nutzungsdaten
usage = admin.get_usage(window_days=30)

API-Schlüssel-Verwaltung

# Einen Suchschlüssel erstellen
key = admin.create_key(
    name="My Search Key",
    scopes=["search"],
    index_slug="products",
)
print(f"Created key: {key['prefix']}... (plaintext: {key.get('key', 'shown once')})")

# Schlüssel auflisten und widerrufen
keys = admin.list_keys()
admin.revoke_key(key_id=key["id"])

Fehlerbehandlung

from aacsearch import (
    AacsearchError,
    AuthenticationError,
    NotFoundError,
    RateLimitError,
)

try:
    results = client.search(q="laptop")
except AuthenticationError:
    print("Ungültiger oder abgelaufener API-Schlüssel")
except NotFoundError:
    print("Index nicht gefunden")
except RateLimitError:
    print("Ratenlimit überschritten, später erneut versuchen")
except AacsearchError as e:
    print(f"API-Fehler {e.status_code}: {e}")

On this page