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
17und 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
TEXToderjsonb-formatierten Strings zuordnen.Solr erfordert einen eindeutigen Schlüssel im Sortierausdruck, damit die Paginierung ordnungsgemäß funktioniert. Standardmäßig wird das Feld
idverwendet. 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 Optionunique_key_sort_suffix, wenn Sie die externe Tabelle erstellen.
Hinweis
Bevor Sie beginnen, müssen Sie Folgendes erledigt haben:
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:passwordsein.Achten Sie darauf, dass das von AlloyDB verwendete Dienstkonto die Berechtigung
secretmanager.secretAccessorhat, 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.123456789012steht 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 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 Formatsolr_field_name PG_DATA_TYPEfolgt. 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 istidfestgelegt.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 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.
Hybride Suche
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 Feldsolr_field_namenach dem Ausdruck „cloud databases“ gesucht.