Busca gerenciada
A busca gerenciada é um serviço de busca de texto (barra de busca de produto, catálogo, documentação, logs de aplicação) que a plataforma cria, atualiza, monitora e copia para você. Ele é um nó do grafo do ambiente, como um banco ou um volume: você o adiciona no canvas (ou no coda.yaml), liga as aplicações a ele por aresta e usa as variáveis que ele publica.
O serviço não tem endereço público: só as aplicações ligadas por aresta no mesmo ambiente o alcançam. Se o navegador precisa buscar, faça a busca pela sua API.
Escolher o motor
| Motor | Para quem | Destaques | Limites |
|---|---|---|---|
| Meilisearch (padrão) | todos os planos | Resposta em milissegundos, tolerância a erro de digitação, facetas, filtros, sinônimos e busca híbrida. Pouca memória (a partir de 512 MiB). | Uma instância só (sem alta disponibilidade). Snapshots só restauram na mesma versão. |
| OpenSearch (avançado) | planos com o recurso OpenSearch (Business e Enterprise) | Agregações analíticas, consultas complexas, scripts Painless, réplicas e shards. 1 ou 3 instâncias. | A partir de 2 GiB por instância. Sem Dashboards. |
O motor é escolhido na criação e não muda depois. Para trocar de motor, crie outro nó e reindexe a partir da sua fonte de dados.
Criar o serviço
No canvas do ambiente, adicione uma Busca e escolha:
| Campo | Descrição |
|---|---|
| Motor | meilisearch ou opensearch. Não muda depois de aplicado. |
| Versão | A série do motor (1 no Meilisearch, 3 no OpenSearch). |
| Tamanho | search-s1 a search-m2 (Meilisearch) ou os-m1 a os-l1 (OpenSearch). |
| Instâncias | Só OpenSearch: 1 ou 3. O máximo depende do plano. |
| Disco (GiB) | Só aumenta. |
| Janela de manutenção | Quando as atualizações de versão menor podem ser aplicadas. |
| Agenda e retenção de snapshot | Horário do snapshot diário e por quantos dias guardá-lo (o teto depende do plano). |
O mesmo serviço no coda.yaml:
nodes:
busca:
kind: search
config:
engine: meilisearch
engineMajor: "1"
size: search-s1
backupSchedule: "0 2 * * *"
backupRetentionDays: 7
api:
kind: application
# ...
edges:
- from: api
to: busca
network: { ports: [7700] }
reference: true
Conectar a aplicação
Ligue a aplicação ao serviço com uma aresta de rede na porta do motor (7700 no Meilisearch, 9200 no OpenSearch) e de referência. As variáveis publicadas pelo nó:
| Variável | Motor | Conteúdo |
|---|---|---|
SEARCH_ENGINE | ambos | meilisearch ou opensearch |
SEARCH_HOST, SEARCH_PORT, SEARCH_URL | ambos | Endereço interno (http://busca:7700 ou https://logs:9200) |
SEARCH_API_KEY (secreta) | Meilisearch | Chave da aplicação: busca, documentos, índices, tarefas e configurações |
SEARCH_READONLY_KEY (secreta) | Meilisearch | Chave só de busca |
SEARCH_USERNAME, SEARCH_PASSWORD (secretas) | OpenSearch | Usuário da aplicação |
SEARCH_CA_CERT (secreta) | OpenSearch | CA do certificado TLS do serviço |
Na aplicação, referencie as variáveis com ${{ busca.SEARCH_URL }} e ${{ busca.SEARCH_API_KEY }}.
Meilisearch com o SDK JavaScript:
import { MeiliSearch } from "meilisearch";
const client = new MeiliSearch({ host: process.env.SEARCH_URL, apiKey: process.env.SEARCH_API_KEY });
await client.index("produtos").addDocuments([{ id: 1, nome: "Camiseta azul" }]);
const resultado = await client.index("produtos").search("camiseta");
OpenSearch com o cliente oficial em Python:
import os
from opensearchpy import OpenSearch
client = OpenSearch(
hosts=[os.environ["SEARCH_URL"]],
http_auth=(os.environ["SEARCH_USERNAME"], os.environ["SEARCH_PASSWORD"]),
ca_certs="/tmp/search-ca.pem", # grave o conteúdo de SEARCH_CA_CERT neste arquivo na inicialização
)
client.index(index="produtos", body={"nome": "Camiseta azul"}, refresh=True)
Chaves e permissões
A plataforma guarda a chave mestra (Meilisearch) e o usuário administrador (OpenSearch); eles nunca chegam à sua aplicação.
- Meilisearch: a chave da aplicação faz busca, gestão de documentos, índices, tarefas e configurações. Ela não cria chaves, dumps nem snapshots e não acessa recursos experimentais. A chave somente leitura só busca.
- OpenSearch: o usuário da aplicação lê e escreve nos seus índices (qualquer nome que não comece com
.) e consulta a saúde do cluster. Ele não altera configurações do cluster, não usa repositórios de snapshot nem acessa índices de sistema.
Para trocar as credenciais, use Rotacionar credencial na aba Conexão. A troca entra no rascunho do ambiente e, ao aplicar, as aplicações ligadas reiniciam com os valores novos. Há uma janela curta em que a chave antiga é recusada (401).
Snapshots e restauração
O serviço tira um snapshot por dia no horário escolhido e o guarda fora do cluster, no armazenamento de backup da sua organização. Você também pode pedir um snapshot sob demanda com um rótulo (por exemplo, antes-reindex). O número de snapshots sob demanda por dia depende do plano.
A restauração sempre cria um nó novo no rascunho do ambiente:
- No mesmo ambiente (Developer): escolha o snapshot na aba Snapshots e dê o nome do nó novo.
- Em outro ambiente do projeto (Admin): o último snapshot concluído é restaurado no ambiente escolhido.
Depois de aplicar, ligue as aplicações ao nó restaurado e remova o antigo, se quiser. Snapshots do Meilisearch só restauram na mesma versão: restaure e depois atualize.
Ao remover o nó, a plataforma tira um snapshot final antes de apagar os dados e o mantém pelo prazo do plano; ele pode ser restaurado enquanto não expirar.
Painel
A aba Visão geral mostra a saúde, o disco e a memória, buscas por segundo, a latência p95, a indexação em andamento e o último snapshot. A aba Índices lista os 50 maiores índices com documentos e tamanho. O painel nunca lê o conteúdo dos documentos.
Atualizações
Versões menores são aplicadas na janela de manutenção, com aviso 7 dias antes. A mudança de série (por exemplo, OpenSearch 3 para 4) é pedida por um Admin na aba Snapshots: a plataforma tira um snapshot antes e troca a versão; no Meilisearch o serviço fica indisponível durante a troca.
Limites por plano
O serviço de busca conta nas mesmas cotas dos outros serviços de dados (número de serviços, vCPU, memória, disco, espaço de backup, instâncias e retenção). Só a busca tem duas chaves próprias:
| Recurso | Starter | Pro | Business | Enterprise |
|---|---|---|---|---|
| Motor OpenSearch | não | não | sim | sim |
| Snapshots sob demanda por dia | 1 | 3 | 10 | 50 |
A cobrança é por vCPU, memória e disco do serviço (incluindo o agente da plataforma) e pelo espaço dos snapshots.