Auf Solr-Daten aus AlloyDB for PostgreSQL zugreifen

Sie können über die externe Suchintegration in AlloyDB Omni auf in Apache Solr gespeicherte Daten zugreifen und diese durchsuchen.

Beschränkungen

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

  • Die Solr-Integration ist nur in PostgreSQL-Hauptversion 17 und höher verfügbar.

  • AlloyDB liest Solr-Daten, schreibt aber keine Daten in Solr.

  • 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 aufrechtzuerhalten.

  • 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 hat Solr keine vordefinierten Felder vom Typ JSON. Sie müssen die Felder vom Typ JSON TEXT oder jsonb-formatierten Strings zuordnen.

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

Hinweis

Bevor Sie beginnen, müssen Sie Folgendes erledigt haben:

  • Fügen Sie Ihrer primären AlloyDB-Instanz eine öffentliche IP-Verbindung für ausgehenden Traffic hinzu.

  • Stellen Sie Ihren Solr-Cluster mit einer zugänglichen öffentlichen URL bereit und führen Sie ihn aus.

  • Speichern Sie Ihre Solr-Anmeldedaten in Secret Manager. Bei der Standardauthentifizierung muss der Wert des Secrets ein base64-codierter String im Format username:password sein.

  • Achten Sie darauf, dass das von AlloyDB verwendete Dienstkonto die Berechtigung secretmanager.secretAccessor hat, um das Secret aus Secret Manager zu lesen.

Erweiterung external_search_fdw 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-Authentifizierungs anmeldedaten. Beispiel: projects/123456789012/secrets/apikey/versions/1. 123456789012 steht für Ihre Google Cloud Projekt-ID.

  1. Definieren Sie die PostgreSQL-Nutzerzuordnung für den Solr-Server. Hinweis: Für PostgreSQL FDWs ist diese Nutzerzuordnung erforderlich. AlloyDB authentifiziert sich mit dem 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 dem Format solr_field_name PG_DATA_TYPE folgt. 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 mit mehreren Feldern und ihren Sortierreihenfolgen, z. B. myid0 ASC, myid1 DESC, die für die Paginierung verwendet werden. Standardmäßig ist id festgelegt.

    • 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 nimmt SQL-Abfragen entgegen und konvertiert sie in Solr REST API-Abfragen.

Sie haben folgende Möglichkeiten, Ihre Solr-Daten abzufragen:

  • Standard-SQL-Abfragen
  • Abfrage-DSL
  • Hybride Suche

Standard-SQL-Abfragen

Sie können Standard-SQL mit 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 verwenden Sie die Solr-Abfrage-DSL im JSON-Format 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;

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 ausführen möchten, verknüpfen Sie die Ergebnisse der Solr-Tokensuche mit den Ergebnissen der AlloyDB-Vektorsuche.

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 Suchergebnisses 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 dem Ausdruck „cloud databases“ gesucht.