AACsearch
SDK

Python SDK

Как использовать AACsearch на Python — установка пакета, поиск товаров, управление индексами и синонимами.

Python SDK для AACsearch

Библиотека aacsearch позволяет интегрировать поиск в ваши Python-приложения. Она поддерживает как поиск товаров, так и полное управление индексами на серверной стороне.

Установка

Для Python 3.9 и выше:

pip install aacsearch

Использование в коде

Поиск товаров

Самый частый сценарий — поиск товаров из вашего приложения.

from aacsearch import SearchClient

client = SearchClient(
    base_url="https://app.aacsearch.com",
    api_key="ss_search_your_key_here",  # Ключ поиска из панели управления
    index_slug="products",  # Название индекса (например, "products", "articles")
)

# Простой поиск
results = client.search(q="laptop")
print(f"Найдено {results['found']} результатов")
for item in results['hits']:
    print(f"  - {item['title']} (${item['price']})")

# Поиск с фильтрами и сортировкой
results = client.search(
    q="phone",
    filter_by="price:<=500",  # Цена не более $500
    facet_by="brand,category",  # Получить статистику по брендам и категориям
    sort_by="price:asc",  # Отсортировать по цене (дешевле в начале)
    per_page=20,
)
print(f"Фильтрованных результатов: {results['found']}")

# Несколько поисков в одном запросе
combined = client.multi_search([
    {"q": "laptop", "per_page": 5},
    {"q": "phone", "per_page": 5},
])

Управление индексами и данными (серверная сторона)

Для управления индексом и добавления товаров в каталог используйте административный клиент. Используйте этот код только на сервере — никогда не встраивайте административные ключи в браузерный код.

from aacsearch import AdminClient

admin = AdminClient(
    base_url="https://app.aacsearch.com",
    api_key="aa_admin_your_key_here",  # Административный ключ из панели управления
    project_id="org_xxx",  # ID вашей организации
)

Типичные задачи

Создание индекса

Создайте индекс для хранения товаров. Укажите названия полей и их типы (строка, число, список).

# Создание индекса
index = admin.create_index(
    slug="products",
    display_name="Products",
    fields=[
        {"name": "title", "type": "string"},
        {"name": "description", "type": "string"},
        {"name": "price", "type": "float", "sort": True},  # sort=True позволяет сортировать по этому полю
        {"name": "brand", "type": "string", "facet": True},  # facet=True для фильтров в UI
        {"name": "category", "type": "string[]", "facet": True},  # Массив для нескольких категорий
    ],
    default_sorting_field="price",
)
print(f"Индекс готов: {index['id']}")

# Список ваших индексов
indexes = admin.list_indexes()
for idx in indexes:
    print(f"  - {idx['display_name']} ({idx['slug']})")

Добавление товаров в каталог

После создания индекса вы можете добавлять товары. Добавляйте их по одному или пакетом.

# Добавить один товар
admin.upsert_document(
    index_id=index["id"],
    document_id="doc_001",  # Уникальный ID товара
    document={
        "title": "MacBook Pro 16\"",
        "description": "Apple M3 Pro chip, 18GB RAM",
        "price": 2499.00,
        "brand": "Apple",
        "category": ["Laptops", "Apple"],  # Массив категорий
    },
)

# Добавить много товаров за раз (до 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"},
        {"id": "doc_004", "title": "Pixel 9", "price": 799.00, "brand": "Google"},
    ],
)
print("Товары добавлены и доступны для поиска")

Синонимы для лучшего поиска

Добавьте синонимы, чтобы пользователи находили товары по разным словам. Например, "ноутбук" = "лаптоп" = "компьютер".

admin.upsert_synonyms(
    index_id=index["id"],
    synonyms=[
        {"root": "laptop", "synonym": "notebook"},  # Поиск "notebook" найдет товары с "laptop"
        {"root": "laptop", "synonym": "ultrabook"},
        {"root": "phone", "synonym": "smartphone"},
        {"root": "phone", "synonym": "мобильный телефон"},  # Поддержка кириллицы
    ],
)

Закрепление товаров в поиске (курации)

Вы можете закрепить определённые товары в начале результатов для конкретных запросов.

admin.upsert_curations(
    index_id=index["id"],
    curations=[
        {"query": "macbook", "pinnedIds": ["doc_001"]},  # Когда ищут "macbook", MacBook Pro будет в начале
    ],
)

Просмотр статистики

Смотрите, как часто люди ищут товары в вашем индексе.

# Статистика за последние 7 дней
analytics = admin.get_analytics(period="7d")
print(f"Всего поисков: {analytics.get('total_searches', 0)}")
print(f"Уникальные поисковые запросы: {analytics.get('unique_queries', 0)}")

# Детальные данные об использовании за 30 дней
usage = admin.get_usage(window_days=30)
print(f"Кол-во документов: {usage.get('doc_count', 0)}")

Создание и управление ключами доступа

Создавайте и отзывайте ключи для различных приложений.

# Создать ключ поиска для фронтенда
key = admin.create_key(
    name="My Frontend Key",
    scopes=["search"],  # Только поиск (безопасно для браузера)
    index_slug="products",
)
print(f"Ключ создан (сохраните в безопасном месте): {key['key']}")

# Список всех ключей
keys = admin.list_keys()
for k in keys:
    print(f"  - {k['name']} ({k['prefix']}...)")

# Отозвать ключ (он больше не будет работать)
admin.revoke_key(key_id=key["id"])

Обработка ошибок

При работе с API полезно обрабатывать типичные ошибки.

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

try:
    results = client.search(q="laptop")
except AuthenticationError:
    print("❌ Ошибка: неверный или просроченный ключ API")
    print("   Проверьте ключ в панели управления AACsearch")
except NotFoundError:
    print("❌ Ошибка: индекс не найден")
    print("   Убедитесь, что индекс существует и назван правильно")
except RateLimitError:
    print("⏳ Превышен лимит запросов")
    print("   Подождите немного и повторите")
except AacsearchError as e:
    print(f"❌ Ошибка API (код {e.status_code}): {e}")

Секретность ключей

  • Ключи поиска (ss_search_*) безопасны для браузера и фронтенда
  • Административные ключи (aa_admin_*) никогда не встраивайте в браузерный код — используйте только на сервере
  • Храните ключи в переменных окружения (.env), а не в коде
  • Если ключ скомпрометирован, отозвите его в панели управления

On this page