Accéder aux données OpenSearch depuis AlloyDB Omni

Sélectionnez une version de la documentation :

Vous pouvez accéder aux données stockées dans OpenSearch et les rechercher à l'aide de l'intégration de la recherche externe dans AlloyDB Omni. Cette intégration vous permet d'effectuer une recherche fédérée dans les index OpenSearch existants et vos tables relationnelles sans avoir à copier ni à déplacer les données.

Avant de commencer

Avant de commencer, procédez comme suit :

Stocker les identifiants OpenSearch dans Secret Manager

AlloyDB Omni stocke et lit vos identifiants OpenSearch à partir de Secret Manager. Pour l'authentification HTTP de base, la valeur du secret dans Secret Manager doit être une chaîne au format username:password. Pour en savoir plus sur l'utilisation de Secret Manager, consultez Créer un secret et y accéder à l'aide de Secret Manager.

Assurez-vous que le compte de service utilisé par AlloyDB Omni dispose de l'autorisation secretmanager.secretAccessor pour lire le secret à partir de Secret Manager. Pour en savoir plus, consultez Gérer l'accès aux secrets.

Activer et configurer l'extension external_search_fdw

Pour commencer votre intégration à OpenSearch, configurez l'accès à votre cluster OpenSearch via un serveur de données externe.

  1. Connectez-vous à votre base de données et activez l'extension :

    CREATE EXTENSION external_search_fdw;
    
  2. Créez un serveur étranger :

    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'
    );
    

    Remplacez les variables suivantes :

    • OPENSEARCH_SERVER_NAME: nom de votre serveur de données externe. Exemple : opensearch.

    • OPENSEARCH_SERVER_HOST_PORT: URL publique de votre cluster OpenSearch. Exemple : https://search-my-domain.us-east-1.es.amazonaws.com:443.

    • AUTH_METHOD: type d'authentification à utiliser. Exemple : Basic.

    • SECRET_PATH: chemin d'accès Secret Manager à vos identifiants d'authentification OpenSearch. Exemple : projects/PROJECT_ID/secrets/opensearch-credentials/versions/1.

  3. Définissez le mappage utilisateur pour le serveur OpenSearch :

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER OPENSEARCH_SERVER_NAME;
    
  4. Mappez le schéma de votre index OpenSearch à une table externe 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'
           );
    

    Remplacez les variables suivantes :

    • OPENSEARCH_FD_TABLE : nom de la table de données externe qui représente votre table OpenSearch. Exemple : my-fd-opensearch-table.

    • OPENSEARCH_FIELDS : liste de valeurs séparées par une virgule, où chaque entrée suit le format opensearch_field_name PG_DATA_TYPE. Pour obtenir la liste des types de données OpenSearch compatibles et de leurs types PostgreSQL correspondants, consultez Types de données compatibles.

    • OPENSEARCH_INDEX_NAME : nom de votre index OpenSearch. Exemple : my-opensearch-index.

Interroger vos données OpenSearch

AlloyDB Omni convertit les requêtes SQL en requêtes d'API REST OpenSearch.

Requêtes SQL standard

Vous pouvez utiliser le langage SQL standard avec la syntaxe Lucene pour l'expression de recherche.

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

Remplacez les variables suivantes :

  • OPENSEARCH_FD_TABLE : nom de la table de données externe qui représente votre table OpenSearch. Exemple : my-fd-opensearch-table.

  • FILTER : (facultatif) filtre à appliquer à votre requête OpenSearch. Exemple : a = 10 AND b < 105.

  • QUERY : requête à envoyer à OpenSearch. Exemple : body:database.

Requête DSL

Pour les cas d'utilisation avancés, utilisez le langage spécifique à un domaine (DSL, domain-specific language) de requête au format JSON d'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;

Remplacez OPENSEARCH_FD_TABLE par le nom de la table de données externe qui représente votre table OpenSearch. Exemple : my-fd-opensearch-table.

Pour effectuer une recherche hybride sur vos données OpenSearch, joignez les résultats de la recherche de jetons OpenSearch aux résultats de la recherche vectorielle 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;

Remplacez les variables suivantes :

  • LIMIT : nombre de résultats à renvoyer. Exemple : 10.

  • WEIGHT: contribution de cette entrée de recherche à la fusion de classement réciproque (RRF, Reciprocal Rank Fusion) globale. Exemple : 0.5. Si vous ne fournissez pas de pondérations, elles sont réparties de manière égale. Pour en savoir plus, consultez Paramètres de la fonction de recherche hybride.

  • OPENSEARCH_FD_TABLE : nom de la table de données externe qui représente votre table OpenSearch. Exemple : my-fd-opensearch-table.

  • QUERY : requête à envoyer à OpenSearch. Exemple : body:database.

Dépannage

Si vous rencontrez des problèmes d'authentification ou de connectivité lorsque vous interrogez votre cluster OpenSearch, vérifiez les points suivants :

  • Erreurs d'authentification HTTP 401 ou 403 : vérifiez que votre secret OpenSearch dans Secret Manager contient une chaîne au format username:password et que votre compte de service dispose de l'autorisation secretmanager.secretAccessor.
  • Délai de connexion expiré : vérifiez les règles réseau et la configuration du pare-feu entre AlloyDB Omni et votre point de terminaison OpenSearch.

Limites

  • Lecture seule : AlloyDB Omni lit les données OpenSearch, mais ne les écrit pas.
  • Gestion des données : AlloyDB Omni n'indexe pas automatiquement les données de votre base de données dans OpenSearch. Vous êtes responsable du remplissage de vos index OpenSearch et du maintien de la cohérence entre les données d'AlloyDB Omni et les données indexées dans OpenSearch.
  • Gestion des schémas : AlloyDB Omni ne synchronise pas automatiquement les schémas avec OpenSearch. Si le schéma de votre index OpenSearch change, mettez à jour manuellement le schéma de la table externe PostgreSQL correspondante.
  • Types non compatibles : les types OpenSearch spécialisés, tels que les types géospatiaux, ne sont pas compatibles.
  • Authentification : vous devez utiliser l'authentification de base (nom d'utilisateur et mot de passe) configurée dans votre cluster OpenSearch.

Étape suivante