É 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:
- Instalar o AlloyDB Omni usando contêineres.
- Implantar e configurar o OpenSearch com um endpoint público acessível.
- Ative o plug-in de segurança no cluster do OpenSearch e crie um usuário com acesso somente leitura no banco de dados de usuários internos. O AlloyDB Omni usa essas credenciais para acessar o cluster do OpenSearch.
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.
Conecte-se ao banco de dados e ative a extensão:
CREATE EXTENSION external_search_fdw;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.
Defina o mapeamento de usuários para o servidor do OpenSearch:
CREATE USER MAPPING FOR CURRENT_USER SERVER OPENSEARCH_SERVER_NAME;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 formatoopensearch_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.
Pesquisas híbridas
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:passworde se a conta de serviço tem a permissãosecretmanager.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
Saiba como acessar dados do Elasticsearch.
Saiba como acessar dados do Solr.
Saiba como executar uma pesquisa híbrida de similaridade vetorial.