Accéder aux données Solr depuis AlloyDB pour PostgreSQL

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 Omni.

Limites

Avant de connecter AlloyDB à Solr, tenez compte des limites suivantes :

  • L'intégration de Solr n'est disponible que sur PostgreSQL version majeure 17 et ultérieures.

  • AlloyDB lit les données Solr, mais ne les écrit pas.

  • AlloyDB n'indexe pas automatiquement les données de votre base de données dans Solr. Vous êtes responsable du remplissage 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 externe PostgreSQL correspondante.

  • Contrairement à Elasticsearch, Solr ne comporte pas de champs prédéfinis de type JSON. Vous devez mapper les champs de type JSON sur des chaînes au format TEXT ou jsonb.

  • Solr nécessite une clé unique dans l'expression de tri pour que la pagination fonctionne correctement. Par défaut, le champ id est 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'option unique_key_sort_suffix lorsque vous créez la table externe.

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.

  • Stockez vos identifiants Solr dans Secret Manager. Pour l'authentification de base, la valeur du secret doit être une chaîne encodée en base64 au format username:password.

  • Assurez-vous que le compte de service utilisé par AlloyDB dispose de l'autorisation secretmanager.secretAccessor pour lire le secret à partir de Secret Manager.

Activer et configurer l'extension external_search_fdw

Pour commencer votre intégration à 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 : Basic.

  • SECRET_PATH : chemin d'accès Secret Manager à vos identifiants d'authentification Solr. Par exemple, projects/123456789012/secrets/apikey/versions/1. 123456789012 représente l'ID de votre Google Cloud projet.

  1. Définissez le mappage des utilisateurs PostgreSQL pour le serveur Solr. Notez que les FDW PostgreSQL nécessitent ce mappage des 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;
    
  2. Mappez le schéma de votre collection Solr sur 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 externe qui représente votre table Solr. Exemple : my-fd-solr-table.

    • SOLR_FIELDS : liste séparée par une virgule où chaque entrée suit le format solr_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 acceptés.

    • UNIQUE_KEY_SORT_SUFFIX : (facultatif) clé unique dans Solr ou liste de plusieurs champs séparés par une virgule avec leurs ordres de tri (par exemple, myid0 ASC, myid1 DESC), utilisée pour la pagination. La valeur par défaut est id.

    • PG_DATA_TYPE : type PostgreSQL sur lequel vous souhaitez le mapper. Voici quelques exemples courants :

      • TEXT pour les données de chaîne.
      • INTEGER pour 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 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 externe qui représente votre table Solr. Exemple : my-fd-solr-table.

  • (Facultatif) FILTER : filtre à appliquer à votre requête Solr. Exemple : AND qubits < 105.

  • QUERY: 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 Query DSL.

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.

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 : 10.

  • WEIGHT: contribution de cette entrée de recherche à la fusion de classement réciproque (RRF) globale. Exemple : 0.5.

  • SOLR_FD_TABLE: nom de la table de données externe 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 solr_field_name champ.