Datenbankconnector bereitstellen

Warnung: Die Cloud Search-Referenz-Connectors werden ohne Mängelgewähr zur Verfügung gestellt als Beispielcode um eigene funktionierende Connectors zu erstellen. Dieser Beispielcode erfordert umfangreiche Anpassungen und Tests durchzuführen, bevor sie als Proof of Concept oder Produktionsumgebungen. Für den Einsatz in der Produktion empfehlen wir dringend, sich an Hilfe zu wenden. von einem unserer Cloud Search-Partner. Weitere Unterstützung bei der Suche nach einer geeigneten Cloud Wenn Sie Suchnetzwerk-Partner einbeziehen, wenden Sie sich an Ihren Google Account Manager.

Sie können Google Cloud Search so einrichten, dass Daten in den Datenbanken mithilfe des Datenbank-Connectors von Google Cloud Search.

Wichtige Aspekte

Sie können den Cloud Search-Datenbankconnector in fast jeder Umgebung installieren und ausführen, in der Java-Anwendungen ausgeführt werden können. Voraussetzung ist, dass der Connector Zugriff auf beides hat. dem Internet und der Datenbank.

Systemanforderungen

Systemanforderungen
Betriebssystem Windows oder Linux
SQL-Datenbank Jede SQL-Datenbank mit einem kompatiblen Treiber für JDBC 4.0 oder höher, einschließlich der folgenden:
<ph type="x-smartling-placeholder">
    </ph>
  • MS SQL Server (2008, 2012, 2014, 2016)
  • Oracle (11g, 12c)
  • Google Cloud SQL
  • MySQL
Software JDBC-Treiber für den Connector für den Zugriff auf die Datenbank (separat heruntergeladen und installiert)

Connector bereitstellen

In den folgenden Schritten wird beschrieben, wie Sie den Connector installieren und konfigurieren. die angegebenen Datenbanken zu indexieren und die Ergebnisse an Cloud Search-Nutzer zurückzugeben.

Vorbereitung

Stellen Sie vor der Bereitstellung des Cloud Search-Datenbankconnectors die folgenden Informationen zusammen:

Schritt 1: Software für den Datenbank-Connector herunterladen und erstellen

  1. Klonen Sie das Connector-Repository von GitHub.
    $ git clone https://github.com/google-cloudsearch/database-connector.git
    $ cd database-connector
  2. Sehen Sie sich die gewünschte Version des Connectors an:
    $ git checkout tags/v1-0.0.3
  3. Erstellen Sie den Connector.
    $ mvn package
    Wenn Sie die Tests beim Erstellen des Connectors überspringen möchten, verwenden Sie mvn package -DskipTests.
  4. Kopieren Sie die ZIP-Datei des Connectors in Ihr lokales Installationsverzeichnis und entpacken Sie sie:
    $ cp target/google-cloudsearch-database-connector-v1-0.0.3.zip installation-dir
    $ cd installation-dir
    $ unzip google-cloudsearch-database-connector-v1-0.0.3.zip
    $ cd google-cloudsearch-database-connector-v1-0.0.3

Schritt 2: Datenbank-Connector konfigurieren

  1. Erstellen Sie eine Textdatei und nennen Sie sie connector-config.properties (Standardeinstellung) oder ähnlich. Google empfiehlt dass Sie Konfigurationsdateien mit dem .properties benennen, oder .config und belassen Sie die Datei im selben Verzeichnis wie der Connector. Falls Sie einen anderen Namen oder Pfad verwenden, müssen Sie den Pfad beim Ausführen des Connectors angeben.
  2. Fügen Sie dem Dateiinhalt Parameter als Schlüssel/Wert-Paare hinzu. In der Konfigurationsdatei muss Folgendes angegeben werden: die Parameter für den Zugriff auf Datenquellen, den Datenbankzugriff, eine SQL-Anweisung für den vollständigen Durchlauf den Titel des Inhaltsfelds und Spaltendefinitionen. Sie können auch ein anderes Connector-Verhalten konfigurieren mit optionalen Parametern. Hier einige Beispiele:
    # Required parameters for data source access
    api.sourceId=1234567890abcdef
    api.identitySourceId=0987654321lmnopq
    api.serviceAccountPrivateKeyFile=./PrivateKey.json
    #
    # Required parameters for database access
    db.url=jdbc:mysql://localhost:3306/mysql_test
    db.user=root
    db.password=passw0rd
    #
    # Required full traversal SQL statement parameter
    db.allRecordsSql=select customer_id, first_name, last_name, phone, change_timestamp from address_book
    #
    # Required parameters for column definitions and URL format
    db.allColumns=customer_id, first_name, last_name, phone, change_timestamp
    db.uniqueKeyColumns=customer_id
    url.columns=customer_id
    #
    # Required content field parameter
    contentTemplate.db.title=customer_id
    #
    # Optional parameters to set ACLs to "entire domain" access
    defaultAcl.mode=fallback
    defaultAcl.public=true
    #
    # Optional parameters for schedule traversals
    schedule.traversalIntervalSecs=36000
    schedule.performTraversalOnStart=true
    schedule.incrementalTraversalIntervalSecs=3600
    

    Ausführliche Beschreibungen der datenbankspezifischen Parameter finden Sie in der Referenz zu den Konfigurationsparametern am Ende dieses Artikels.

    Weitere Informationen zu den Parametern, die für alle Cloud Search-Anwendungen gelten Connectors wie Metadatenkonfiguration, Datums-/Uhrzeitformate und ACL-Optionen <ph type="x-smartling-placeholder"></ph> Von Google bereitgestellte Connector-Parameter.

    Geben Sie gegebenenfalls Attribute des Schemaobjekts in der Durchlauf-SQL an. Suchparametern. Normalerweise können Sie dem SQL-Code . Wenn Sie z. B. einen Film haben, Datenbank und das Schema der Datenquelle eine Property-Definition mit dem Namen „ActorName“ verwenden, könnte eine SQL-Anweisung das Format SELECT …, last_name AS ActorName, … FROM … haben.

Schritt 3: Datenbank-Connector ausführen

Im folgenden Beispiel wird davon ausgegangen, dass sich die erforderlichen Komponenten in der lokalen auf einem Linux-System.

Geben Sie den folgenden Befehl ein, um den Connector über die Befehlszeile auszuführen:

java \
   -cp "google-cloudsearch-database-connector-v1-0.0.3.jar:mysql-connector-java-5.1.41-bin.jar" \
   com.google.enterprise.cloudsearch.database.DatabaseFullTraversalConnector \
   [-Dconfig=mysql.config]

Wobei:

  • google-cloud-search-database-connector-v1-0.0.3.jar ist die JAR-Datei des Datenbank-Connectors
  • mysql-connector-java-5.1.41-bin.jar ist der verwendete JDBC-Treiber für den Zugriff auf die Datenbank
  • mysql.config ist eine benutzerdefinierte Konfigurationsdatei. Um sicherzustellen, dass der Connector Ihre Konfigurationsdatei ihren Pfad in der Befehlszeile angeben. Andernfalls verwendet der Connector connector-config.properties in Ihrer Region als Standarddateiname.

Der Connector meldet Konfigurationsfehler, sobald er sie erkennt. Einige Fehler werden gemeldet, wenn vom Connector initialisiert wird, z. B. wenn eine Datenbankspalte als Teil des Eintragsinhalts definiert ist (in db.allColumns), aber die Spalte wird nicht in der Durchlauf-SQL-Abfrage der Datenbank (in db.allRecordsSql). Andere Fehler werden nur erkannt und gemeldet, wenn Der Connector versucht, für den ersten Durchlauf auf die Datenbank zuzugreifen, beispielsweise eine ungültige SQL-Anweisung in der Syntax.

Referenz zu Konfigurationsparametern

Parameter für den Zugriff auf Datenquellen

Einstellung Parameter
Datenquellen-ID api.sourceId = source-ID

Erforderlich. Cloud Search Quell-ID, die der Google Workspace-Administrator eingerichtet hat.

ID der Identitätsquelle api.identitySourceId = identity-source-ID

Erforderlich, um externe Nutzer und Gruppen für ACLs zu verwenden. Cloud Search ID der Identitätsquelle, die der Google Workspace-Administrator eingerichtet hat.

Dienstkonto api.serviceAccountPrivateKeyFile = path-to-private-key

Erforderlich. Der Pfad zu Cloud Search Dienstkontoschlüsseldatei, die der Google Workspace-Administrator erstellt hat.

Parameter für den Datenbankzugriff

Einstellung Parameter
Datenbank-URL db.url = database-URL

Erforderlich. Die vollständiger Pfad der Datenbank, auf die zugegriffen werden soll, z. B. jdbc:mysql://127.0.0.1/dbname.

Nutzername und Passwort für die Datenbank db.user = username
db.password = password

Erforderlich. Einen gültigen Nutzernamen und Passwort, mit dem der Connector auf die Datenbank zugreift. Dieser Datenbanknutzer muss Lesezugriff auf die relevanten Datensätze der zu lesenden Datenbank haben.

JDBC-Treiber db.driverClass = oracle.jdbc.OracleDriver

Nur erforderlich, wenn der JDBC 4.0-Treiber nicht bereits im Klassenpfad angegeben ist.

Durchlauf-SQL-Abfrageparameter

Der Connector durchsucht Datenbankeinträge mit SQL SELECT Abfragen in der Konfigurationsdatei. Sie müssen eine Abfrage für den vollständigen Durchlauf konfigurieren. Abfragen für inkrementelle Durchläufe sind optional.

Bei einem Durchlauf mit vollständiger Indexierung werden alle Datensätze gelesen, die für die Indexierung konfiguriert sind. Eine vollständige Durchlauf ist erforderlich, um neue Datensätze für Cloud Search zu indexieren und neu zu indexieren alle vorhandenen Datensätze.

Bei einem inkrementellen Durchlauf werden nur neu geänderte Datenbanken gelesen und neu indexiert Datensätze und neue Einträge in der Datenbank enthalten. Inkrementelle Durchläufe können effizienter sein als vollständigen Durchläufen. Ihre Datenbank muss Zeitstempelfelder enthalten, um Durchläufe mit Teilindexierung zu verwenden um auf geänderte Einträge hinzuweisen.

Der Connector führt diese Durchläufe gemäß den Zeitplänen aus, die Sie in den Durchlaufzeitplan

Einstellung Parameter
Abfrage für vollständigen Durchlauf db.allRecordsSql = SELECT column-1[, column-2,...] FROM database-name

Erforderlich. Die Abfrage, die für jeden vollständigen Durchlauf ausgeführt wird.

Jeder Spaltenname, den der Connector in beliebigen Kapazität (Inhalt, eindeutige ID, ACLs) muss in dieser Abfrage vorhanden sein. Die Connector führt beim Start vorläufige Prüfungen durch, um Fehler zu erkennen und Auslassungen. Verwenden Sie daher nicht den allgemeinen Ausdruck SELECT * FROM ... Abfrage.

Paginierung für vollständigen Durchlauf db.allRecordsSql.pagination = {none | offset}

Mögliche Werte sind:

  • none: keine Paginierung
  • offset: Paginierung nach Zeilenversatz

    Wenn Sie die Paginierung mit Offset verwenden möchten, muss die SQL-Abfrage ein Platzhalter-Fragezeichen (?) enthalten für einen Zeilenversatz beginnen, der mit Null beginnt. Bei jedem vollständigen Durchlauf wird die Abfrage wiederholt ausgeführt. bis keine Ergebnisse mehr zurückgegeben werden.

Abfrage für inkrementellen Durchlauf db.incrementalUpdateSql = SELECT column-1[, column-2,...] FROM database-name WHERE last_update_time > ?

Erforderlich, wenn Sie inkrementelle Durchläufe planen.

Das Zeichen „?“ in der Abfrage ist ein obligatorischer Platzhalter für einen Zeitstempelwert. Die Der Connector verwendet den Zeitstempel, um Änderungen zwischen SQL-Abfragen für inkrementelle Durchläufe zu verfolgen.

Fügen Sie zum Verfolgen der Datenbank-Zeitstempelspalte für die letzte Aktualisierung den Parameter timestamp_column-Alias für die SQL-Anweisung; Andernfalls wird der aktuelle Zeitstempel beim Connector-Durchlauf.

Beim ersten Durchlauf mit Teilindexierung verwendet der Connector die Startzeit des Connectors. Nach dem beim ersten Durchlauf mit Teilindexierung, speichert Cloud Search den Zeitstempel, Bei Connector-Neustarts kann auf den vorherigen Durchlauf mit Teilindexierung zugegriffen werden Zeitstempel.

Zeitzone der Datenbank db.timestamp.timezone = America/Los_Angeles

Gibt die Zeitzone an, die für Datenbankzeitstempel verwendet werden soll. Der Datenbankzeitstempel, der verwendet wird, um neue Datensätze oder neue Datensätze zu identifizieren geänderten Datenbankeinträgen. Standardmäßig wird die lokale Zeitzone verwendet, in der der Connector ausgeführt wird.

Beispiele für Durchlauf-SQL-Abfragen

  • Grundlegende Abfrage mit vollständigem Durchlauf, die jeden relevanten Datensatz in einer Mitarbeiterdatenbank zur Indexierung liest:
    db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \
        FROM employee
  • Legen Sie die Paginierung mit Offset fest und teilen Sie einen Durchlauf mit vollständiger Indexierung in mehrere Abfragen auf.

    Für SQL Server 2012 oder Oracle 12c (Standard-SQL 2008-Syntax):

    db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \
        FROM employee \
        ORDER BY customer_id OFFSET ? ROWS FETCH FIRST 1000 ROWS ONLY
    db.allRecordsSql.pagination = offset
    

    oder für MySQL oder Google Cloud SQL:

    db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \
        FROM employee \
        ORDER BY customer_id LIMIT 1000 OFFSET ?
    db.allRecordsSql.pagination = offset
  • Abfrage für vollständigen Durchlauf, bei der einzelne ACLs mit Aliasnamen angewendet werden:
    db.allRecordsSql = SELECT customer_id, first_name, last_name,  employee_id, interesting_field, last_update_time, \
         permitted_readers AS readers_users, \
         denied_readers AS denied_users, \
         permitted_groups AS readers_groups, \
         denied_groups AS denied_groups \
         FROM employee
  • Einfache Abfrage für inkrementellen Durchlauf:
    db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time \
         FROM employee \
         WHERE last_update_time > ?
  • Abfrage für inkrementellen Durchlauf, bei der einzelne ACLs mit Aliassen angewendet werden:
    db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time, \
         permitted_readers AS readers_users, \
         denied_readers AS denied_users, \
         permitted_groups AS readers_groups, \
         denied_groups AS denied_groups \
         FROM employee \
         WHERE last_update_time > ?
  • Abfrage für inkrementellen Durchlauf, bei der der Datenbankzeitstempel und nicht die aktuelle Zeit verwendet wird:
    db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, \
         last_update_time AS timestamp_column \
         FROM employee \
         WHERE last_update_time > ?

Parameter zur Spaltendefinition

Die folgenden Parameter geben die Spalten an, die Sie in den Durchlaufanweisungen verwenden und jeden Datensatz eindeutig identifiziert.

Einstellung Parameter
Alle Spalten db.allColumns = column-1, column-2, ...column-N

Erforderlich. Kennzeichnet alle Spalten die in einer SQL-Abfrage beim Zugriff auf die Datenbank erforderlich sind. Die Spalten die mit diesem Parameter definiert werden, muss in den Abfragen explizit referenziert werden. Jeden anderer Spaltendefinitionsparameter mit diesem Spaltensatz verglichen.

Beispiel:

db.allColumns = customer_id, first_name, last_name, phone, change_timestamp
Eindeutige Schlüsselspalten db.uniqueKeyColumns = column-1[, column-2]

Erforderlich. Listet entweder eine einzelne Datenbankspalte, die eindeutige Werte oder eine Kombination aus Spalten, deren Werte zusammen eine eindeutige ID definieren.

Für Cloud Search muss jedes durchsuchbare Dokument eine eindeutige Kennung haben in einer Datenquelle. Sie müssen in der Lage sein, für jeden Datenbankeintrag eine eindeutige ID zu definieren aus Spaltenwerten. Wenn Sie mehrere Connectors auf separaten Datenbanken ausführen, in einem gemeinsamen Dataset zu erstellen, geben Sie unbedingt eine eindeutige ID in allen Dokumenten.

Beispiele:

db.uniqueKeyColumns = customer_id
# or
db.uniqueKeyColumns = last_name, first_name
Spalte „URL-Link“ url.columns = column-1[, column-2]

Erforderlich. Gibt mindestens einen gültigen, definierten an Namen der Spalten, die für die URL für ein anklickbares Suchergebnis verwendet werden. Für Datenbanken, denen keine relevante URL zugeordnet ist, wird ein kann für jeden Datensatz verwendet werden.

Wenn die Spaltenwerte jedoch einen gültigen Link für jeden Datensatz definieren, wird in der Ansicht URL-Spalten und Werte für die Formatkonfiguration müssen angegeben werden.

URL-Format url.format = https://www.example.com/{0}

Definiert das Format der Ansichts-URL. Nummerierte Parameter beziehen sich auf die Spalten, in db.columns angegeben werden, beginnend mit null.

Wenn keine Angabe erfolgt, wird der Standardwert „{0}“ verwendet.

Beispiele folgen dieser Tabelle.

In Prozent codierte Spalten für URL url.columnsToEscape = column-1[, column-2]

Gibt Spalten aus db.columns an, deren Werte in Prozent codiert werden bevor sie in den formatierten URL-String eingefügt werden.

Beispiele für URL-Spalten

So legen Sie die in Durchlaufabfragen verwendeten Spalten und das Format der Ansichts-URL fest:

  • So verwenden Sie eine statische URL ohne Datenbankeintragswerte:
    url.format = https://www.example.com
  • So verwenden Sie einen einzelnen Spaltenwert, der die Ansichts-URL ist:
    url.format = {0}
    url.columns = customer_id
  • So verwenden Sie einen einzelnen Spaltenwert, der in der Ansichts-URL an Position {0} ersetzt wird:
    url.format = https://www.example.com/customer/id={0}
    url.columns = customer_id
    url.columnsToEscape = customer_id
  • So verwenden Sie mehrere Spaltenwerte zum Erstellen der Ansichts-URL (Spalten sind reihenfolgeabhängig):
    url.format = {1}/customer={0}
    url.columns = customer_id, linked_url
    url.columnsToEscape = customer_id

Inhaltsfelder

Mit Inhaltsoptionen definieren Sie, welche Eintragswerte Teil des durchsuchbaren Inhalts sein sollten.

Einstellung Parameter
Spalte mit der höchsten Qualität contentTemplate.db.title = column-name

Erforderlich. Die Spalte mit der höchsten Qualität für die Suchindexierung und Ergebnispriorisierung.

Spaltenpriorisierung für die Suche contentTemplate.db.quality.high = column-1[, column-2...]
contentTemplate.db.quality.medium = column-1[, column-2...]
contentTemplate.db.quality.low = column-1[, column-2...]

Inhaltsspalten festlegen (außer der für contentTemplate.db.title festgelegten Spalte) als Felder mit hoher, mittlerer oder niedriger Suchqualität. Nicht angegebene Spalten sind standardmäßig auf niedrig eingestellt.

Spalten für Inhaltsdaten db.contentColumns = column-1[, column-2...]

Geben Sie Inhaltsspalten in der Datenbank an. Diese sind formatiert und die als durchsuchbaren Dokumentinhalt in Cloud Search hochgeladen wurden.

Wenn Sie keinen Wert angeben, wird der Standardwert * verwendet. Dies bedeutet, dass alle Spalten für den Inhalt verwendet werden.

Blob-Spalte db.blobColumn = column-name

Geben Sie den Namen eines einzelnen Blobs an , die für den Dokumentinhalt anstelle einer Kombination von Inhaltsspalten verwendet werden soll.

Wenn eine Blob-Spalte angegeben ist, gilt sie als Fehler, wenn Inhaltsspalten definiert sind. Definitionen für Metadaten und strukturierte Datenspalten zusammen mit Blob-Spalten weiterhin zulässig.