Sie können mit der externen Suchintegration in AlloyDB for PostgreSQL auf Daten zugreifen und darin suchen, die in Apache Solr gespeichert sind.
Hinweis
Bevor Sie beginnen, müssen Sie Folgendes erledigt haben:
Stellen Sie Ihren Solr-Cluster mit einer öffentlich zugänglichen URL bereit und führen Sie ihn aus.
Solr-Anmeldedaten in Secret Manager speichern
AlloyDB speichert Ihre Solr-Anmeldedaten in Secret Manager und liest sie daraus. Bei der Basisauthentifizierung 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 lesen zu können. 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, müssen Sie den Zugriff auf Ihren Solr-Cluster über einen Foreign Data Server konfigurieren.
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 ausländischen Datenserver. Beispiel:solr.SOLR_SERVER_HOST_PORT: Öffentlich zugängliche URL für Ihren SOLR-Cluster. Beispiel:https://node1.solr.test.com:8983.AUTH_METHOD: Der zu verwendende Authentifizierungstyp. Beispiel:Basic.SECRET_PATH: Secret Manager-Pfad zu Ihren Solr-Anmeldedaten für die Authentifizierung. Beispiel:projects/123456789012/secrets/apikey/versions/1123456789012steht für Ihre Google Cloud Projekt-ID.
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;Ordnen Sie das Schema Ihrer Solr-Sammlung einer PostgreSQL-Fremdtabelle 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 Formatsolr_field_name PG_DATA_TYPEentspricht. 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 wird. Die Standardeinstellung istid.PG_DATA_TYPE: der PostgreSQL-Typ, dem Sie ihn zuordnen möchten. Beispiele:TEXTfür Stringdaten.INTEGERfür numerische Daten.
SOLR_COLLECTION_NAME: Name Ihrer Solr-Sammlung. Beispiel:my-solr-collection.
Solr-Daten abfragen
AlloyDB nimmt SQL-Abfragen entgegen und wandelt sie in Solr REST API-Abfragen um.
Zum Abfragen Ihrer Solr-Daten haben Sie folgende Möglichkeiten:
- Standard-SQL-Abfragen
- Abfrage-DSL
- Hybridsuchen
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: Die an Solr zu sendende Abfrage. Beispiel:body:database.
Abfrage-DSL
Für komplexe Anwendungsfälle können Sie die Abfrage-DSL im Solr-JSON-Stil 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.
Hybridsuchen
Wenn Sie eine hybride Suche für Ihre Solr-Daten ausführen möchten, müssen Sie die Ergebnisse der Solr-Tokensuche mit den Ergebnissen der AlloyDB-Vektorsuche zusammenführen.
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 zum 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: Die an Solr zu sendende Abfrage. Mit"solr_field_name:\"cloud databases\""wird beispielsweise im Feldsolr_field_namenach dem Begriff „Cloud-Datenbanken“ gesucht.
Fehlerbehebung
Wenn beim Abfragen Ihres Solr-Clusters Authentifizierungs- oder Verbindungsprobleme auftreten, prüfen Sie die folgenden häufigen Ursachen:
- HTTP-Authentifizierungsfehler 401 oder 403:Prüfen Sie, ob Ihr Solr-Secret in Secret Manager einen base64-codierten String im Format
username:passwordenthält und ob das von AlloyDB verwendete Dienstkonto die Berechtigungsecretmanager.secretAccessorhat. - Zeitüberschreitungen bei Verbindungen:Prüfen Sie, ob die öffentliche IP-Verbindung für ausgehende Verbindungen in Ihrer primären AlloyDB-Instanz aktiviert ist und ob Ihre Solr-Firewall eingehende Verbindungen am angegebenen Port zulässt.
Beschränkungen
Beachten Sie vor dem Herstellen einer Verbindung zwischen AlloyDB und Solr die folgenden Einschränkungen:
Die Solr-Integration ist nur in PostgreSQL-Hauptversion
17und höher verfügbar.AlloyDB liest Solr-Daten, schreibt aber nicht in Solr.
Ihre Datenbankdaten werden in AlloyDB nicht automatisch in Solr indexiert. 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 gibt es in Solr keine vordefinierten Felder mit dem Typ „JSON“. Sie müssen die Felder vom Typ „JSON“
TEXT- oderjsonb-formatierten Strings zuordnen.Für die korrekte Funktion der Paginierung ist in Solr ein eindeutiger Schlüssel im Sortierausdruck erforderlich. Standardmäßig wird das Feld
idverwendet. Sie können beim Erstellen der externen Tabelle mit der Optionunique_key_sort_suffixein benutzerdefiniertes Feld oder eine durch Kommas getrennte Liste mit mehreren Feldern und den zugehörigen Sortierreihenfolgen angeben, z. B.myid0 ASC, myid1 DESC.