Vous pouvez accéder aux données stockées dans Apache Solr et les rechercher à l'aide de l'intégration de la recherche externe dans AlloyDB pour PostgreSQL.
Avant de commencer
Avant de commencer, assurez-vous d'avoir effectué les opérations suivantes :
Ajoutez une connectivité IP publique sortante sur votre instance AlloyDB principale.
Déployez et exécutez votre cluster Solr avec une URL publique accessible.
Stocker les identifiants Solr dans Secret Manager
AlloyDB stocke et lit vos identifiants Solr à partir de Secret Manager. Pour l'authentification 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 votre compte de service AlloyDB dispose du rôle Accesseur de secrets Secret Manager (roles/secretmanager.secretAccessor) pour lire le secret depuis Secret Manager. Pour en savoir plus, consultez Créer un secret et y accéder à l'aide de Secret Manager.
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.
CREATE EXTENSION external_search_fdw;
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. Par exemple :projects/123456789012/secrets/apikey/versions/1.123456789012représente l'ID de votre projet Google Cloud .
Définissez le mappage utilisateur PostgreSQL pour le serveur Solr. Notez que les FDW PostgreSQL nécessitent ce mappage d'utilisateurs pour fonctionner. AlloyDB s'authentifie à l'aide de l'en-tête d'autorisation REST.
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 nouvelles 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 exemplemyid0 ASC, myid1 DESC, utilisé pour la pagination. La valeur par défaut estid.PG_DATA_TYPE: type PostgreSQL auquel vous souhaitez le mapper. Voici quelques exemples courants :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 prend les requêtes SQL et les convertit en requêtes d'API REST Solr.
Pour interroger vos données Solr, vous disposez des options suivantes :
- Requêtes SQL standards
- DSL de requête
- Recherches hybrides
Requêtes SQL standards
Vous pouvez utiliser le langage SQL standard avec la syntaxe Lucene pour l'expression de recherche.
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.(Facultatif)
FILTER: filtre à appliquer à votre requête Solr. Exemple :AND qubits < 105QUERY: requête à envoyer à Solr. Exemple :body:database
DSL de requête
Pour les cas d'utilisation avancés, 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, joignez les résultats de la recherche de jetons Solr aux résultats de la recherche vectorielle AlloyDB.
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.5SOLR_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. Par exemple,"solr_field_name:\"cloud databases\""recherche l'expression "cloud databases" dans le champsolr_field_name.
Dépannage
Si vous rencontrez des problèmes d'authentification ou de connectivité lors de l'interrogation de votre cluster Solr, vérifiez les causes courantes suivantes :
- 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 dispose de l'autorisationsecretmanager.secretAccessor. - Délais avant expiration de la connexion : vérifiez que la connectivité IP publique sortante est activée sur votre instance AlloyDB principale et que votre pare-feu Solr autorise les connexions entrantes sur le port spécifié.
Limites
Avant de connecter AlloyDB à Solr, tenez compte des limites suivantes :
L'intégration Solr n'est disponible que sur la version majeure
17de PostgreSQL et les versions ultérieures.AlloyDB lit les données Solr, mais n'y écrit pas.
AlloyDB 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 et les données indexées dans Solr.
AlloyDB ne synchronise pas automatiquement les schémas avec Solr. Si le schéma de votre collection Solr change, vous devez mettre à jour manuellement le schéma de la table étrangère PostgreSQL correspondante.
Contrairement à Elasticsearch, Solr ne comporte pas de champs de type JSON prédéfinis. Vous devez mapper les champs de type JSON à des chaînes au format
TEXToujsonb.Solr nécessite une clé unique dans l'expression de tri pour que la pagination fonctionne correctement. Par défaut, le champ
idest utilisé. Vous pouvez spécifier un champ personnalisé ou une liste de plusieurs champs séparés par une virgule, ainsi que leurs ordres de tri individuels (par exemple,myid0 ASC, myid1 DESC), à l'aide de l'optionunique_key_sort_suffixlorsque vous créez la table externe.
É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.