Puedes acceder a los datos almacenados en OpenSearch y buscarlos con la integración de búsqueda externa en AlloyDB Omni. Esta integración te permite realizar búsquedas federadas en índices de OpenSearch existentes y en tus tablas relacionales sin copiar ni mover datos.
Antes de comenzar
Antes de comenzar, completa lo siguiente:
- Instala AlloyDB Omni con contenedores.
- Implementa y configura OpenSearch con un endpoint público accesible.
- Habilita el complemento de seguridad en tu clúster de OpenSearch y crea un usuario con acceso de solo lectura en la base de datos de usuarios internos. AlloyDB Omni usa estas credenciales para acceder a tu clúster de OpenSearch.
Almacena las credenciales de OpenSearch en Secret Manager
AlloyDB Omni almacena y lee tus credenciales de OpenSearch desde
Secret Manager. Para la autenticación básica de HTTP, el valor del
secreto en Secret Manager debe ser una cadena con el formato
username:password. Para obtener más información sobre cómo usar
Secret Manager, consulta
Crea un secreto y accede a él con Secret Manager.
Asegúrate de que la cuenta de servicio que usa AlloyDB Omni tenga
el permiso secretmanager.secretAccessor para leer el secreto de
Secret Manager. Para obtener más información, consulta
Administra el acceso a los secretos.
Habilita y configura la extensión external_search_fdw
Para comenzar la integración con OpenSearch, configura el acceso a tu clúster de OpenSearch a través de un servidor de datos externo.
Conéctate a tu base de datos y habilita la extensión:
CREATE EXTENSION external_search_fdw;Crea un 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' );Reemplaza las siguientes variables:
OPENSEARCH_SERVER_NAME: Es el nombre de tu servidor de datos externo. Por ejemplo,opensearchOPENSEARCH_SERVER_HOST_PORT: Es la URL pública de tu clúster de OpenSearch. Por ejemplo,https://search-my-domain.us-east-1.es.amazonaws.com:443.AUTH_METHOD: Es el tipo de autenticación que se usará. Por ejemplo,BasicSECRET_PATH: Es la ruta de acceso de Secret Manager a tus credenciales de autenticación de OpenSearch. Por ejemplo,projects/PROJECT_ID/secrets/opensearch-credentials/versions/1.
Define la asignación de usuarios para el servidor de OpenSearch:
CREATE USER MAPPING FOR CURRENT_USER SERVER OPENSEARCH_SERVER_NAME;Asigna el esquema de tu índice de OpenSearch a una tabla externa de 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' );Reemplaza las siguientes variables:
OPENSEARCH_FD_TABLE: Es el nombre de la tabla de datos externa que representa tu tabla de OpenSearch. Por ejemplo,my-fd-opensearch-tableOPENSEARCH_FIELDS: Es una lista separada por comas en la que cada entrada sigue el formatoopensearch_field_name PG_DATA_TYPE. Para obtener una lista de los tipos de datos de OpenSearch compatibles y sus tipos de PostgreSQL correspondientes, consulta Tipos de datos compatibles.OPENSEARCH_INDEX_NAME: Es el nombre de tu índice de OpenSearch. Por ejemplo,my-opensearch-index
Consulta tus datos de OpenSearch
AlloyDB Omni convierte las consultas en SQL en consultas de la API de REST de OpenSearch.
Consultas en SQL estándar
Puedes usar SQL estándar con la sintaxis de Lucene para la expresión de búsqueda.
SELECT id, body
FROM OPENSEARCH_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';
Reemplaza las siguientes variables:
OPENSEARCH_FD_TABLE: Es el nombre de la tabla de datos externa que representa tu tabla de OpenSearch. Por ejemplo,my-fd-opensearch-tableFILTER: Es el filtro (opcional) que se aplicará a tu consulta de OpenSearch. Por ejemplo,a = 10 AND b < 105QUERY: Es la consulta que se enviará a OpenSearch. Por ejemplo,body:database
DSL de consulta
Para casos de uso avanzados, usa el lenguaje específico de dominio (DSL) de consulta de estilo JSON de 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;
Reemplaza OPENSEARCH_FD_TABLE por el nombre de la tabla de datos externa que representa tu tabla de OpenSearch. Por ejemplo, my-fd-opensearch-table
Búsquedas híbridas
Para realizar una búsqueda híbrida en tus datos de OpenSearch, une los resultados de la búsqueda de tokens de OpenSearch con los resultados de Vector Search de 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;
Reemplaza las siguientes variables:
LIMIT: Es la cantidad de resultados que se mostrarán. Por ejemplo,10WEIGHT: Es la contribución de esta entrada de búsqueda a la fusión por clasificación recíproca (RRF) general. Por ejemplo,0.5. Si no proporcionas pesos, se distribuyen de manera uniforme. Para obtener más información, consulta Parámetros de la función de búsqueda híbrida.OPENSEARCH_FD_TABLE: Es el nombre de la tabla de datos externa que representa tu tabla de OpenSearch. Por ejemplo,my-fd-opensearch-tableQUERY: Es la consulta que se enviará a OpenSearch. Por ejemplo,body:database
Soluciona problemas
Si tienes problemas de autenticación o conectividad cuando consultas tu clúster de OpenSearch, verifica lo siguiente:
Errores de autenticación HTTP 401 o 403: Verifica que tu secreto de OpenSearch en Secret Manager contenga una cadena con el formato
username:passwordy que tu cuenta de servicio tenga el permisosecretmanager.secretAccessor.Tiempos de espera de conexión: Verifica las reglas de red y la configuración del firewall entre AlloyDB Omni y tu extremo de OpenSearch.
Limitaciones
Solo lectura: AlloyDB Omni lee, pero no escribe, datos de OpenSearch.
Administración de datos: AlloyDB Omni no indexa automáticamente los datos de tu base de datos en OpenSearch. Eres responsable de propagar tus índices de OpenSearch y mantener la coherencia entre los datos de AlloyDB Omni y los datos indexados en OpenSearch.
Administración de esquemas: AlloyDB Omni no sincroniza automáticamente los esquemas con OpenSearch. Si cambia el esquema de índice de OpenSearch, actualiza manualmente el esquema de la tabla externa de PostgreSQL correspondiente.
Tipos no admitidos: No se admiten los tipos especializados de OpenSearch, como los tipos geoespaciales.
Autenticación: Debes usar la autenticación básica (nombre de usuario y contraseña) configurada en tu clúster de OpenSearch.
¿Qué sigue?
Obtén información para acceder a los datos de Elasticsearch.
Obtén más información para acceder a los datos de Solr.
Aprende a ejecutar una búsqueda híbrida de similitud de vectores.