SDK
Ruby SDK
Установка и использование гема aacsearch-ruby для поиска, управления индексами, синонимами, курированием и аналитикой.
Ruby SDK (aacsearch-ruby)
Гем aacsearch-ruby предоставляет два клиента:
| Клиент | Область | Префикс ключа | Сценарий использования |
|---|---|---|---|
SearchClient | только поиск | ss_search_* | Публичный поиск из бэкенд-скриптов |
AdminClient | полный CRUD | aa_admin_* | Серверное управление, CI/CD |
Установка
Добавьте в Gemfile:
gem 'aacsearch-ruby'Или установите напрямую:
gem install aacsearch-rubyТребуется Ruby 3.0+.
Быстрый старт
SearchClient (публичный)
Используйте с API-ключом области поиска (ss_search_*) или токеном с ограниченной областью (ss_scoped_*).
require 'aacsearch'
client = AACSearch::SearchClient.new(
base_url: "https://app.aacsearch.com",
api_key: "ss_search_your_key_here",
index_slug: "products"
)
# Базовый поиск
results = client.search(q: "laptop")
puts "Found #{results['found']} results"
# Поиск с фильтрами и фасетами
results = client.search(
q: "phone",
filter_by: "price:<=500",
facet_by: "brand,category",
sort_by: "price:asc",
per_page: 20
)
# Мульти-поиск (несколько запросов в одном обращении)
combined = client.multi_search([
{ q: "laptop", per_page: 5 },
{ q: "phone", per_page: 5 }
])AdminClient (серверный)
Используйте с API-ключом области admin (aa_admin_*). Никогда не включайте административные ключи в код браузера.
require 'aacsearch'
admin = AACSearch::AdminClient.new(
base_url: "https://app.aacsearch.com",
api_key: "aa_admin_your_key_here",
project_id: "org_xxx"
)Управление индексами
# Создание индекса
index = admin.create_index(
slug: "products",
display_name: "Products",
fields: [
{ name: "title", type: "string" },
{ name: "price", type: "float", facet: true },
{ name: "category", type: "string", facet: true }
],
default_sorting_field: "price"
)
puts "Created index: #{index['id']}"
# Список индексов
indexes = admin.list_indexes
# Получение информации об индексе
stats = admin.get_index_stats(index['id'])
# Удаление индекса
admin.delete_index(index['id'])Операции с документами
# Пакетный upsert документов
admin.batch_upsert_documents("index_id", [
{ id: "doc_1", title: "Running Shoes", price: 89.99 },
{ id: "doc_2", title: "T-Shirt", price: 29.99 }
])
# Список документов
docs = admin.list_documents("index_id", q: "*", per_page: 20)
# Удаление документа
admin.delete_document("index_id", "doc_1")
# Пакетное удаление
admin.batch_delete_documents("index_id", ids: ["doc_2", "doc_3"])Поиск и аналитика
# Поиск
results = admin.search("index_id", q: "shoes", query_by: "title")
# Получение аналитики
analytics = admin.get_analytics(period: "7d")
puts "Total searches: #{analytics['totalSearches']}, CTR: #{analytics['ctr']}"
# Получение данных об использовании
usage = admin.get_usage(window_days: 30)API-ключи
# Создание API-ключа
key = admin.create_key(
name: "My Search Key",
scopes: ["search"],
index_slug: "products"
)
puts "Created key: #{key['prefix']}..."
# Список ключей
keys = admin.list_keys
# Отзыв ключа
admin.revoke_key(key['id'])Обработка ошибок
begin
results = client.search(q: "laptop")
rescue AACSearch::RateLimitedError => e
# Отступить и повторить
sleep e.retry_after
retry
rescue AACSearch::UnauthorizedError => e
# API-ключ недействителен
puts "Invalid API key: #{e.message}"
rescue AACSearch::NotFoundError => e
# Индекс не найден
puts "Index not found: #{e.message}"
rescue AACSearch::ApiError => e
puts "Error #{e.status_code}: #{e.message}"
endСправочник API
| Категория | Методы |
|---|---|
| Проект | get_project, create_project, get_project_by_id |
| Управление индексами | list_indexes, get_index, create_index, update_index, delete_index, get_index_stats |
| Документы | list_documents, upsert_document, batch_upsert_documents, delete_document, batch_delete_documents |
| Поиск | search, multi_search |
| API-ключи | list_keys, create_key, revoke_key |
| Аналитика | get_analytics, get_usage |
| Синонимы | list_synonyms, create_synonym, upsert_synonyms, delete_synonym |
| Курирование | list_curations, create_curation, upsert_curations, delete_curation |
| Поля сортировки | list_sorting_fields, create_sorting_field, replace_sorting_fields, delete_sorting_field |
| Фасеты | list_facets |