Vous pouvez accéder aux données stockées dans Apache Solr et les rechercher à l'aide de l'intégration de recherche externe dans AlloyDB Omni. Cette intégration vous permet de décharger votre base de données opérationnelle des charges de travail intensives de recherche en texte intégral, d'analyse de requêtes complexes et de facettage avancé vers Solr, ce qui améliore la latence des requêtes et le débit global du système.
Avant de commencer
Avant de commencer, procédez comme suit :
Stocker les identifiants Solr dans Secret Manager
AlloyDB Omni stocke et lit vos identifiants Solr à partir de Secret Manager. Pour l'authentification HTTP de base, la valeur du secret dans Secret Manager doit être une chaîne encodée en base64 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 l'intégration avec Solr, configurez l'accès à votre cluster Solr 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 SOLR_SERVER_NAME FOREIGN DATA WRAPPER external_search_fdw OPTIONS ( server 'SOLR_SERVER_HOST_PORT', search_provider 'solr', auth_mode 'secret_manager', auth_method 'AUTH_METHOD', secret_path 'SECRET_PATH' );Remplacez les variables suivantes :
SOLR_SERVER_NAME: nom de votre serveur de données externe. Exemple :solr.SOLR_SERVER_HOST_PORT: URL publique de votre cluster Solr. Exemple :https://node1.solr.test.com:8983.AUTH_METHOD: type d'authentification à utiliser. Exemple :BasicSECRET_PATH: chemin d'accès Secret Manager à vos identifiants d'authentification Solr. Exemple :projects/PROJECT_ID/secrets/apikey/versions/1.
Définissez le mappage utilisateur pour le serveur Solr :
CREATE USER MAPPING FOR CURRENT_USER SERVER SOLR_SERVER_NAME;Mappez le schéma de votre collection Solr à une table externe PostgreSQL.
CREATE FOREIGN TABLE SOLR_FD_TABLE( metadata external_search_fdw_schema.OpaqueMetadata, SOLR_FIELDS) SERVER SOLR_SERVER_NAME OPTIONS( remote_table_name 'SOLR_COLLECTION_NAME', unique_key_sort_suffix 'UNIQUE_KEY_SORT_SUFFIX' );Remplacez les variables suivantes :
SOLR_FD_TABLE: nom de la table de données étrangère qui représente votre table Solr. Exemple :my-fd-solr-tableSOLR_FIELDS: liste d'éléments séparés par une virgule, où chaque entrée respecte le formatsolr_field_name PG_DATA_TYPE. Pour obtenir la liste des types de données Solr compatibles et de leurs types PostgreSQL correspondants, consultez Types de données compatibles.UNIQUE_KEY_SORT_SUFFIX: (facultatif) champ de clé unique dans Solr ou liste de plusieurs champs séparés par une virgule avec leur ordre de tri (par exemple,myid0 ASC, myid1 DESC), utilisé pour la pagination. La valeur par défaut estid.PG_DATA_TYPE: type PostgreSQL auquel vous souhaitez le mapper. Exemple :TEXTpour les données de chaîne.INTEGERpour les données numériques.
SOLR_COLLECTION_NAME: nom de votre collection Solr. Exemple :my-solr-collection
Interroger vos données Solr
AlloyDB Omni convertit les requêtes SQL en requêtes API REST Solr.
Requêtes SQL standards
Pour l'expression de recherche, vous pouvez utiliser le langage SQL standard avec la syntaxe Lucene.
SELECT id, body
FROM SOLR_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';
Remplacez les variables suivantes :
SOLR_FD_TABLE: nom de la table de données étrangère qui représente votre table Solr. Exemple :my-fd-solr-table.FILTER: (facultatif) filtre à appliquer à votre requête Solr. Exemple :a = 10 AND qubits < 105QUERY: requête à envoyer à Solr. Exemple :body:database
DSL de requête
Pour les cas d'utilisation avancés (par exemple, l'implémentation de requêtes imbriquées, de tri personnalisé ou de filtrage complexe), utilisez le DSL de requête de style JSON Solr.
SELECT id, title
FROM SOLR_FD_TABLE
ORDER BY metadata <@> $${
"query": "title:solr",
"filter": ["category:software", "inStock:true"],
"sort": "price desc"
}$$
LIMIT 1;
Remplacez SOLR_FD_TABLE par le nom de la table de données externe qui représente votre table Solr. Exemple : my-fd-solr-table.
Recherches hybrides
Pour effectuer une recherche hybride sur vos données Solr, associez les résultats de recherche de jetons Solr aux résultats de Vector Search AlloyDB Omni.
SELECT *
FROM ai.hybrid_search(
ARRAY[
'{"limit": LIMIT,
"weight": WEIGHT,
"table_name": "SOLR_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 :10WEIGHT: contribution de cette entrée de recherche à la Reciprocal Rank Fusion (RRF) globale. Exemple :0.5. Si vous ne fournissez pas de pondérations, elles sont réparties de manière uniforme. Pour en savoir plus, consultez Paramètres de la fonction de recherche hybride.SOLR_FD_TABLE: nom de la table de données étrangère qui représente votre table Solr. Exemple :my-fd-solr-table.QUERY: requête à envoyer à Solr. Exemple :body:database
Dépannage
Si vous rencontrez des problèmes d'authentification ou de connectivité lors de l'interrogation de votre cluster Solr, vérifiez les points suivants :
Erreurs d'authentification HTTP 401 ou 403 : vérifiez que votre secret Solr dans Secret Manager contient une chaîne encodée en base64 au format
username:passwordet que le compte de service utilisé par AlloyDB Omni dispose de l'autorisationsecretmanager.secretAccessor.Délais avant expiration de la connexion : vérifiez les règles réseau et la configuration du pare-feu entre AlloyDB Omni et votre point de terminaison Solr.
Limites
Lecture seule : AlloyDB Omni lit les données Solr, 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 Solr. Vous êtes responsable de l'alimentation de vos collections Solr et du maintien de la cohérence entre les données d'AlloyDB Omni et les données indexées dans Solr.
Gestion des schémas : AlloyDB Omni ne synchronise pas automatiquement les schémas avec Solr. Si le schéma de votre collection Solr change, mettez à jour manuellement le schéma de la table étrangère PostgreSQL correspondante.
Types non compatibles : les types Solr spécialisés, tels que les types géospatiaux, ne sont pas compatibles.
Tri stable : pour que la pagination fonctionne correctement, Solr nécessite une clé unique dans l'expression de tri. Par défaut, le champ
idest utilisé. Pour spécifier un champ personnalisé ou une liste de plusieurs champs séparés par une virgule, ainsi que leurs ordres de tri individuels, utilisez l'optionunique_key_sort_suffixlorsque vous créez la table externe. Par exemple, spécifiezmyid0 ASC, myid1 DESC.
Étapes suivantes
Découvrez comment accéder aux données OpenSearch.
Découvrez comment accéder aux données Elasticsearch.
Découvrez comment exécuter une recherche hybride de similarité vectorielle.