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), а не в коде - Если ключ скомпрометирован, отозвите его в панели управления