AACsearch
SDK

Ruby SDK

Установка и использование гема aacsearch-ruby для поиска, управления индексами, синонимами, курированием и аналитикой.

Ruby SDK (aacsearch-ruby)

Гем aacsearch-ruby предоставляет два клиента:

КлиентОбластьПрефикс ключаСценарий использования
SearchClientтолько поискss_search_*Публичный поиск из бэкенд-скриптов
AdminClientполный CRUDaa_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

On this page