Accede a los datos de OpenSearch desde AlloyDB Omni

Selecciona una versión de la documentación:

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:

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.

  1. Conéctate a tu base de datos y habilita la extensión:

    CREATE EXTENSION external_search_fdw;
    
  2. 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, opensearch

    • OPENSEARCH_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, Basic

    • SECRET_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.

  3. Define la asignación de usuarios para el servidor de OpenSearch:

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER OPENSEARCH_SERVER_NAME;
    
  4. 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-table

    • OPENSEARCH_FIELDS: Es una lista separada por comas en la que cada entrada sigue el formato opensearch_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-table

  • FILTER: Es el filtro (opcional) que se aplicará a tu consulta de OpenSearch. Por ejemplo, a = 10 AND b < 105

  • QUERY: 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

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, 10

  • WEIGHT: 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-table

  • QUERY: 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:password y que tu cuenta de servicio tenga el permiso secretmanager.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?