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 :
- Installez AlloyDB Omni à l'aide de conteneurs.
- Déployez et configurez OpenSearch avec un point de terminaison public accessible.
- Activez le plug-in de sécurité sur votre cluster OpenSearch et créez un utilisateur en lecture seule dans la base de données des utilisateurs internes. AlloyDB Omni utilise ces identifiants pour accéder à votre cluster OpenSearch.
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.
Connectez-vous à votre base de données et activez l'extension :
CREATE EXTENSION external_search_fdw;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.
Définissez le mappage utilisateur pour le serveur OpenSearch :
CREATE USER MAPPING FOR CURRENT_USER SERVER OPENSEARCH_SERVER_NAME;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 formatopensearch_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.
Recherches hybrides
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:passwordet que votre compte de service dispose de l'autorisationsecretmanager.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
- Découvrez comment accéder aux données Elasticsearch.
- Découvrez comment accéder aux données Solr.
- Découvrez comment exécuter une recherche hybride de similarité vectorielle.