Acessar dados do OpenSearch no AlloyDB Omni

Selecione uma versão da documentação:

É possível acessar e pesquisar dados armazenados no OpenSearch usando a integração de pesquisa externa no AlloyDB Omni. Com essa integração, é possível realizar pesquisas federadas em índices do OpenSearch e tabelas relacionais sem copiar ou mover dados.

Antes de começar

Antes de começar, faça o seguinte:

Armazenar credenciais do OpenSearch no Secret Manager

O AlloyDB Omni armazena e lê suas credenciais do OpenSearch no Secret Manager. Para a autenticação HTTP básica, o valor do secret no Secret Manager precisa ser uma string formatada como username:password. Para mais informações sobre como usar o Secret Manager, consulte Criar e acessar um secret usando o Secret Manager.

Verifique se a conta de serviço usada pelo AlloyDB Omni tem a permissão secretmanager.secretAccessor para ler o secret do Secret Manager. Para mais informações, consulte Gerenciar o acesso a secrets.

Ativar e configurar a extensão external_search_fdw

Para iniciar a integração com o OpenSearch, configure o acesso ao cluster do OpenSearch usando um servidor de dados externo.

  1. Conecte-se ao banco de dados e ative a extensão:

    CREATE EXTENSION external_search_fdw;
    
  2. Crie um servidor externo:

    CREATE SERVER OPENSEARCH_SERVER_NAME
    FOREIGN DATA WRAPPER external_search_fdw
    OPTIONS (
      server 'OPENSEARCH_SERVER_HOST_PORT',
      search_provider 'opensearch',
      auth_mode 'secret_manager',
      auth_method 'AUTH_METHOD',
      secret_path 'SECRET_PATH'
    );
    

    Substitua as seguintes variáveis:

    • OPENSEARCH_SERVER_NAME: nome do servidor de dados externo. Por exemplo, opensearch.

    • OPENSEARCH_SERVER_HOST_PORT: URL público do cluster do OpenSearch. Por exemplo, https://search-my-domain.us-east-1.es.amazonaws.com:443.

    • AUTH_METHOD: tipo de autenticação a ser usado. Por exemplo, Basic.

    • SECRET_PATH: caminho do Secret Manager para suas credenciais de autenticação do OpenSearch. Por exemplo, projects/PROJECT_ID/secrets/opensearch-credentials/versions/1.

  3. Defina o mapeamento de usuários para o servidor do OpenSearch:

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER OPENSEARCH_SERVER_NAME;
    
  4. Mapeie o esquema do índice do OpenSearch para uma tabela externa do PostgreSQL:

    CREATE FOREIGN TABLE OPENSEARCH_FD_TABLE(
        metadata external_search_fdw_schema.OpaqueMetadata,
        OPENSEARCH_FIELDS)
           SERVER OPENSEARCH_SERVER_NAME
           OPTIONS(
                remote_table_name 'OPENSEARCH_INDEX_NAME'
           );
    

    Substitua as seguintes variáveis:

    • OPENSEARCH_FD_TABLE: o nome da tabela de dados externa que representa sua tabela do OpenSearch. Por exemplo, my-fd-opensearch-table.

    • OPENSEARCH_FIELDS: uma lista separada por vírgulas em que cada entrada segue o formato opensearch_field_name PG_DATA_TYPE. Para uma lista de tipos de dados do OpenSearch compatíveis e os tipos correspondentes do PostgreSQL, consulte Tipos de dados compatíveis.

    • OPENSEARCH_INDEX_NAME: o nome do índice do OpenSearch. Por exemplo, my-opensearch-index.

Consultar seus dados do OpenSearch

O AlloyDB Omni converte consultas SQL em consultas da API REST do OpenSearch.

Consultas SQL padrão

É possível usar o SQL padrão com a sintaxe do Lucene para a expressão de pesquisa.

SELECT id, body
FROM OPENSEARCH_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';

Substitua as seguintes variáveis:

  • OPENSEARCH_FD_TABLE: nome da tabela de dados externa que representa sua tabela do OpenSearch. Por exemplo, my-fd-opensearch-table.

  • FILTER: (opcional) filtro a ser aplicado à consulta do OpenSearch. Por exemplo, a = 10 AND b < 105.

  • QUERY: consulta a ser enviada ao OpenSearch. Por exemplo, body:database.

DSL de consulta

Para casos de uso avançados, use a linguagem específica de domínio (DSL) de consulta no estilo JSON do OpenSearch.

SELECT id, title
FROM OPENSEARCH_FD_TABLE
ORDER BY metadata <@> $${
  "query": {
    "bool": {
      "must": { "match": { "title": "opensearch" } },
      "filter": { "term": { "category": "software" } }
    }
  },
  "sort": [
    { "price": { "order": "desc" } }
  ]
}$$
LIMIT 1;

Substitua OPENSEARCH_FD_TABLE pelo nome da tabela de dados externa que representa sua tabela do OpenSearch. Por exemplo, my-fd-opensearch-table.

Para realizar uma pesquisa híbrida nos dados do OpenSearch, combine os resultados da pesquisa de token do OpenSearch com os resultados da pesquisa vetorial do AlloyDB Omni.

SELECT *
FROM ai.hybrid_search(
  ARRAY[
    '{"limit": LIMIT,
      "weight": WEIGHT,
      "table_name": "OPENSEARCH_FD_TABLE",
      "key_column": "id",
      "query_text_input": "QUERY"}'::jsonb
  ])
ORDER BY score DESC;

Substitua as seguintes variáveis:

  • LIMIT: número de resultados a serem retornados. Por exemplo, 10.

  • WEIGHT: contribuição dessa entrada de pesquisa para a Reciprocal Rank Fusion (RRF) geral. Por exemplo, 0.5. Se você não fornecer pesos, eles serão distribuídos de maneira uniforme. Para mais informações, consulte Parâmetros da função de pesquisa híbrida.

  • OPENSEARCH_FD_TABLE: nome da tabela de dados externa que representa sua tabela do OpenSearch. Por exemplo, my-fd-opensearch-table.

  • QUERY: consulta a ser enviada ao OpenSearch. Por exemplo, body:database.

Solução de problemas

Se você tiver problemas de autenticação ou conectividade ao consultar o cluster do OpenSearch, verifique o seguinte:

  • Erros de autenticação HTTP 401 ou 403: verifique se o secret do OpenSearch no Secret Manager contém uma string formatada como username:password e se a conta de serviço tem a permissão secretmanager.secretAccessor.

  • Tempo limite de conexão: verifique as regras de rede e a configuração do firewall entre o AlloyDB Omni e o endpoint do OpenSearch.

Limitações

  • Somente leitura: o AlloyDB Omni lê, mas não grava, dados do OpenSearch.

  • Gerenciamento de dados: o AlloyDB Omni não indexa automaticamente os dados do banco de dados no OpenSearch. Você é responsável por preencher os índices do OpenSearch e manter a consistência entre os dados no AlloyDB Omni e os dados indexados no OpenSearch.

  • Gerenciamento de esquemas: o AlloyDB Omni não sincroniza automaticamente os esquemas com o OpenSearch. Se o esquema do índice do OpenSearch mudar, atualize manualmente o esquema da tabela externa correspondente do PostgreSQL.

  • Tipos não compatíveis: tipos especializados do OpenSearch, como tipos geoespaciais, não são compatíveis.

  • Autenticação: use a autenticação básica (nome de usuário e senha) configurada no cluster do OpenSearch.

A seguir