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:
Stellen Sie Ihren Solr-Cluster mit einer zugänglichen, öffentlich zugänglichen URL bereit und führen Sie ihn aus.
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/1123456789012ist Ihre Google Cloud -Projekt-ID.
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;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 Formatsolr_field_name PG_DATA_TYPEhat. 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 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 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.
Hybridsuchen
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 Feldsolr_field_namenach 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:passwordenthält und ob das von AlloyDB verwendete Dienstkonto die Berechtigungsecretmanager.secretAccessorhat. - 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
17verfü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
TEXToderjsonbzuordnen.Solr erfordert einen eindeutigen Schlüssel im Sortierausdruck, damit die Paginierung richtig funktioniert. Standardmäßig wird das Feld
idverwendet. 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 Optionunique_key_sort_suffixverwenden, wenn Sie die externe Tabelle erstellen.