AACsearch
SDKs

SDK de Go

Instala y usa el SDK aacsearch-go para búsqueda, gestión de índices, sinónimos, curadurías y analíticas.

SDK de Go (aacsearch-go)

El módulo github.com/aacsearch/aacsearch-go de Go proporciona dos clientes:

ClienteÁmbitoPrefijo de claveCaso de uso
SearchClientsolo búsquedass_search_*Búsqueda pública desde servicios backend
AdminClientCRUD completoaa_admin_*Gestión del lado servidor, herramientas CLI

Instalación

go get github.com/aacsearch/aacsearch-go

Requiere Go 1.21+.

Inicio rápido

SearchClient (público)

Úsalo con una clave API de ámbito de búsqueda (ss_search_*).

package main

import (
    "log"
    "github.com/aacsearch/aacsearch-go"
)

func main() {
    client, err := aacsearch.NewSearchClient(aacsearch.SearchClientOptions{
        BaseURL:   "https://app.aacsearch.com",
        APIKey:    "ss_search_...",
        IndexSlug: "products",
    })
    if err != nil {
        log.Fatal(err)
    }

    // Búsqueda básica
    result, err := client.Search(aacsearch.SearchParams{Q: "laptop"})
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Se encontraron %d resultados", result.Found)

    // Búsqueda múltiple
    results, err := client.MultiSearch([]aacsearch.SearchParams{
        {Q: "nike", QueryBy: "title"},
        {Q: "adidas", QueryBy: "title", FilterBy: "in_stock:=true"},
    })
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Se obtuvieron %d conjuntos de resultados", len(results.Results))
}

AdminClient (lado servidor)

Úsalo con una clave API de ámbito de administración (aa_admin_*). Nunca la incluyas en código de navegador.

package main

import (
    "log"
    "github.com/aacsearch/aacsearch-go"
)

func boolPtr(b bool) *bool { return &b }

func main() {
    admin, err := aacsearch.NewAdminClient(aacsearch.AdminClientOptions{
        BaseURL:   "https://app.aacsearch.com",
        APIKey:    "aa_admin_...",
        ProjectID: "org_xxx",
    })
    if err != nil {
        log.Fatal(err)
    }

    // Crear un índice
    index, err := admin.CreateIndex(aacsearch.CreateIndexInput{
        Slug:        "products",
        DisplayName: "Products",
        Fields: []aacsearch.FieldDefinition{
            {Name: "title", Type: "string"},
            {Name: "price", Type: "float", Facet: boolPtr(true)},
            {Name: "category", Type: "string", Facet: boolPtr(true)},
        },
        DefaultSortingField: "price",
    })
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Índice creado: %s", index.ID)

    // Inserción/actualización por lotes de documentos
    _, err = admin.BatchUpsertDocuments(index.ID, []map[string]interface{}{
        {"id": "doc_1", "title": "Running Shoes", "price": 89.99},
        {"id": "doc_2", "title": "T-Shirt", "price": 29.99},
    })
    if err != nil {
        log.Fatal(err)
    }

    // Listar índices
    indexes, err := admin.ListIndexes()

    // Obtener analíticas
    analytics, err := admin.GetAnalytics("7d")
    log.Printf("Búsquedas totales: %d, CTR: %.2f", analytics.TotalSearches, analytics.CTR)

    // Crear clave API
    key, err := admin.CreateKey(aacsearch.CreateKeyInput{
        Name:      "My Search Key",
        Scopes:    []aacsearch.KeyScope{aacsearch.KeyScopeSearch},
        IndexSlug: "products",
    })
    log.Printf("Clave creada: %s...", key.Prefix[:8])
}

Manejo de errores

import (
    "errors"
    "github.com/aacsearch/aacsearch-go"
)

result, err := client.Search(aacsearch.SearchParams{Q: "laptop"})
if err != nil {
    var sdkErr *aacsearch.SDKError
    if errors.As(err, &sdkErr) {
        switch sdkErr.Code {
        case "rate_limited":
            // Esperar y reintentar
        case "unauthorized":
            // La clave API no es válida
        case "not_found":
            // Índice no encontrado
        default:
            log.Printf("Error %d: %s", sdkErr.Status, sdkErr.Message)
        }
    }
}

Referencia de la API

CategoríaMétodos
ProyectoGetProject, CreateProject, GetProjectByID
Gestión de índicesListIndexes, GetIndex, CreateIndex, UpdateIndex, DeleteIndex, GetIndexStats
DocumentosListDocuments, UpsertDocument, BatchUpsertDocuments, DeleteDocument, BatchDeleteDocuments
BúsquedaSearch, MultiSearch
Claves APIListKeys, CreateKey, RevokeKey
AnalíticasGetAnalytics, GetUsage
SinónimosListSynonyms, CreateSynonym, UpsertSynonyms, DeleteSynonym
CuraduríasListCurations, CreateCuration, UpsertCurations, DeleteCuration
Campos de ordenListSortingFields, CreateSortingField, ReplaceSortingFields, DeleteSortingField
FacetasListFacets

On this page