Auf Solr-Daten aus AlloyDB for PostgreSQL zugreifen

Mit der externen Suchintegration in AlloyDB for PostgreSQL können Sie auf Daten zugreifen, die in Apache Solr gespeichert sind, und diese durchsuchen.

Hinweis

Bevor Sie beginnen, müssen Sie Folgendes tun:

Solr-Anmeldedaten in Secret Manager speichern

AlloyDB speichert und liest Ihre Solr-Anmeldedaten aus Secret Manager. Bei der Standardauthentifizierung muss der Wert des Secrets in Secret Manager ein base64-codierter String im Format username:password sein. Weitere Informationen zur Verwendung von Secret Manager finden Sie unter Secret mit Secret Manager erstellen und darauf zugreifen.

Achten Sie darauf, dass Ihr AlloyDB-Dienstkonto die Rolle „Secret Manager Secret Accessor“ (roles/secretmanager.secretAccessor) hat, um das Secret aus Secret Manager zu lesen. Weitere Informationen finden Sie unter Secret mit Secret Manager erstellen und darauf zugreifen.

external_search_fdw-Erweiterung aktivieren und konfigurieren

Wenn Sie die Integration mit Solr starten möchten, konfigurieren Sie den Zugriff auf Ihren Solr-Cluster über einen externen Datenserver.

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

Ersetzen Sie die folgenden Variablen:

  • SOLR_SERVER_NAME: Name für Ihren externen Datenserver. Beispiel: solr.

  • SOLR_SERVER_HOST_PORT: Öffentliche URL für Ihren SOLR-Cluster. Beispiel: https://node1.solr.test.com:8983.

  • AUTH_METHOD: Art der zu verwendenden Authentifizierung. Beispiel: Basic.

  • SECRET_PATH: Secret Manager-Pfad zu Ihren Solr-Authentifizierungsdaten. Beispiel: projects/123456789012/secrets/apikey/versions/1 123456789012 ist Ihre Google Cloud -Projekt-ID.

  1. Definieren Sie die PostgreSQL-Nutzerzuordnung für den Solr-Server. Beachten Sie, dass PostgreSQL-FDWs diese Nutzerzuordnung benötigen, um zu funktionieren. AlloyDB authentifiziert sich über den REST-Autorisierungsheader.

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER SOLR_SERVER_NAME;
    
  2. Ordnen Sie das Schema Ihrer Solr-Sammlung einer externen PostgreSQL-Tabelle zu.

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

    Ersetzen Sie die folgenden neuen Variablen:

    • SOLR_FD_TABLE: Name der externen Datentabelle, die Ihre Solr-Tabelle darstellt. Beispiel: my-fd-solr-table.

    • SOLR_FIELDS: eine durch Kommas getrennte Liste, in der jeder Eintrag das Format solr_field_name PG_DATA_TYPE hat. Eine Liste der unterstützten Solr-Datentypen und der entsprechenden PostgreSQL-Typen finden Sie unter Unterstützte Datentypen.

    • UNIQUE_KEY_SORT_SUFFIX: (Optional) Das eindeutige Schlüsselfeld in Solr oder eine durch Kommas getrennte Liste mehrerer Felder mit ihren Sortierreihenfolgen, z. B. myid0 ASC, myid1 DESC, die für die Paginierung verwendet werden. Die Standardeinstellung ist id.

    • PG_DATA_TYPE: der PostgreSQL-Typ, dem Sie ihn zuordnen möchten. Beispiele:

      • TEXT für Stringdaten.
      • INTEGER für numerische Daten.
    • SOLR_COLLECTION_NAME: Name Ihrer Solr-Sammlung. Beispiel: my-solr-collection.

Solr-Daten abfragen

AlloyDB wandelt SQL-Abfragen in Solr REST API-Abfragen um.

Für die Abfrage Ihrer Solr-Daten haben Sie folgende Möglichkeiten:

  • Standard-SQL-Abfragen
  • Abfrage-DSL
  • Hybridsuchen

Standard-SQL-Abfragen

Sie können Standard-SQL mit der Lucene-Syntax für den Suchausdruck verwenden.

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

Ersetzen Sie die folgenden Variablen:

  • SOLR_FD_TABLE: Name der externen Datentabelle, die Ihre Solr-Tabelle darstellt. Beispiel: my-fd-solr-table.

  • (Optional) FILTER: Filter, der auf Ihre Solr-Abfrage angewendet werden soll. Beispiel: AND qubits < 105.

  • QUERY: Abfrage, die an Solr gesendet werden soll. Beispiel: body:database.

Abfrage-DSL

Für erweiterte Anwendungsfälle können Sie die Solr-JSON-ähnliche Query DSL verwenden.

SELECT id, title
FROM SOLR_FD_TABLE
ORDER BY metadata <@> $${
  "query": "title:solr",
  "filter": ["category:software", "inStock:true"],
  "sort": "price desc"
}$$
LIMIT 1;

Ersetzen Sie SOLR_FD_TABLE durch den Namen der externen Datentabelle, die Ihre Solr-Tabelle darstellt. Beispiel: my-fd-solr-table.

Wenn Sie eine hybride Suche in Ihren Solr-Daten durchführen möchten, verknüpfen Sie die Solr-Token-Suchergebnisse mit den AlloyDB-Vektorsuchergebnissen.

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;

Ersetzen Sie die folgenden Variablen:

  • LIMIT: Anzahl der zurückzugebenden Ergebnisse. Beispiel: 10.

  • WEIGHT: Beitrag dieses Sucheintrags zur gesamten Reciprocal Rank Fusion (RRF). Beispiel: 0.5.

  • SOLR_FD_TABLE: Name der externen Datentabelle, die Ihre Solr-Tabelle darstellt. Beispiel: my-fd-solr-table.

  • QUERY: Abfrage, die an Solr gesendet werden soll. Beispiel: Mit "solr_field_name:\"cloud databases\"" wird im Feld solr_field_name nach der Wortgruppe „cloud databases“ gesucht.

Fehlerbehebung

Wenn beim Abfragen Ihres Solr-Clusters Authentifizierungs- oder Verbindungsprobleme auftreten, prüfen Sie die folgenden häufigen Ursachen:

  • HTTP-401- oder 403-Authentifizierungsfehler: Prüfen Sie, ob Ihr Solr-Secret in Secret Manager einen base64-codierten String im Format username:password enthält und ob das von AlloyDB verwendete Dienstkonto die Berechtigung secretmanager.secretAccessor hat.
  • Verbindungszeitüberschreitungen: Prüfen Sie, ob die ausgehende öffentliche IP-Verbindung auf Ihrer primären AlloyDB-Instanz aktiviert ist und ob Ihre Solr-Firewall eingehende Verbindungen über den angegebenen Port zulässt.

Beschränkungen

Bevor Sie AlloyDB mit Solr verbinden, beachten Sie die folgenden Einschränkungen:

  • Die Solr-Integration ist nur für PostgreSQL-Hauptversionen ab 17 verfügbar.

  • AlloyDB liest Solr-Daten, schreibt aber nicht in sie.

  • AlloyDB indexiert Ihre Datenbankdaten nicht automatisch in Solr. Sie sind dafür verantwortlich, Ihre Solr-Sammlungen zu füllen und die Konsistenz zwischen den Daten in AlloyDB und den indexierten Daten in Solr zu wahren.

  • AlloyDB synchronisiert Schemas nicht automatisch mit Solr. Wenn sich das Schema Ihrer Solr-Sammlung ändert, müssen Sie das Schema der entsprechenden externen PostgreSQL-Tabelle manuell aktualisieren.

  • Im Gegensatz zu Elasticsearch gibt es in Solr keine vordefinierten JSON-Felder. Sie müssen die JSON-Felder Strings im Format TEXT oder jsonb zuordnen.

  • Solr erfordert einen eindeutigen Schlüssel im Sortierausdruck, damit die Paginierung richtig funktioniert. Standardmäßig wird das Feld id verwendet. Sie können ein benutzerdefiniertes Feld oder eine durch Kommas getrennte Liste mehrerer Felder zusammen mit ihren individuellen Sortierreihenfolgen angeben, z. B. myid0 ASC, myid1 DESC, indem Sie die Option unique_key_sort_suffix verwenden, wenn Sie die externe Tabelle erstellen.

Nächste Schritte