警告: Cloud Search リファレンス コネクタは「現状のまま」提供されますサンプルコードとして コネクタの作成に使用できます。このサンプルコードでは、 大規模なカスタマイズとテストを行ってから、概念実証または デプロイできます。本番環境で使用する場合は、Google Cloud で 検索することもできます適切な Cloud 検索パートナーの場合は、Google アカウント マネージャーにお問い合わせください。 |
Google Cloud Search を設定すると、組織のさまざまなソースからデータを検出してインデックスに登録できます。 Google Cloud Search データベース コネクタを使用します。
重要な考慮事項
Cloud Search データベース コネクタは、Java アプリを実行できるほぼすべての環境にインストールして実行できます。ただし、コネクタが両方にアクセスできる必要があります。 インターネットとデータベースです
システム要件
システム要件 | |
---|---|
オペレーティング システム | Windows または Linux |
SQL データベース | JDBC 4.0 以降に準拠したドライバを使用する、以下を含む SQL データベース。 <ph type="x-smartling-placeholder">
|
ソフトウェア | データベースへのアクセスに使用するコネクタの JDBC ドライバ(別途ダウンロード、インストール) |
コネクタをデプロイする
次の手順では、コネクタをインストールして構成する方法について説明します。 指定したデータベースにインデックスを付けて、その結果を Cloud Search ユーザーに返します。
前提条件
Cloud Search データベース コネクタをデプロイする前に、次の情報を収集します。
- Google Workspace の秘密鍵。サービス アカウント ID も含まれます。秘密鍵の取得方法については、以下をご覧ください。 Google Cloud へのアクセスを構成する Search REST API。
- Google Workspace データソースの ID。データソース ID を取得する方法については、以下をご覧ください。 検索するデータソースを追加します。
ステップ 1. データベース コネクタ ソフトウェアをダウンロードしてビルドする
- GitHub からコネクタ リポジトリのクローンを作成します。
$ git clone https://github.com/google-cloudsearch/database-connector.git $ cd database-connector
- 目的のバージョンのコネクタを確認してください。
$ git checkout tags/v1-0.0.3
- コネクタを作成します。
コネクタのビルド時にテストをスキップするには、$ mvn package
mvn package -DskipTests
を使用します。 - コネクタの zip ファイルをローカルのインストール ディレクトリにコピーし、解凍します。
$ 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
ステップ 2. データベース コネクタを構成する
- テキスト ファイルを作成し、
connector-config.properties
(デフォルト)などの名前を付けます。Google が推奨.properties
を使用して構成ファイルに名前を付けることです。 または.config
拡張子を使用し、ファイルをコネクタと同じディレクトリに保持してください。 別の名前やパスを使用する場合は、コネクタの実行時にパスを指定する必要があります。 - パラメータを Key-Value ペアとしてファイルの内容に追加します。構成ファイルは、必ず
データソース アクセス、データベース アクセス、データベースのフル走査 SQL ステートメントのパラメータ
コンテンツフィールドのタイトル、列の定義
などがあります他のコネクタの動作も構成できます
オプションのパラメータがあります。次に例を示します。
# 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
データベース固有のパラメータについて詳しくは、 構成パラメータのリファレンスをご覧ください。
すべての Cloud Search に共通するパラメータについて学ぶには、 などのコネクタ(メタデータ構成、日時形式、ACL オプションなど)については、 <ph type="x-smartling-placeholder"></ph> Google 提供のコネクタ パラメータ。
該当する場合は、走査 SQL でスキーマ オブジェクトのプロパティを指定します。 クエリ パラメータを指定します。通常は、SQL にエイリアスを追加できます。 ステートメントです。たとえば映画や データソース スキーマに "ActorName" の場合、SQL ステートメントは
SELECT …, last_name AS ActorName, … FROM …
の形式になります。
ステップ 3. データベース コネクタを実行する
次の例は、必要なコンポーネントがローカルに配置されていることを前提としています。 このディレクトリに配置されます。
コマンドラインからコネクタを実行するには、次のコマンドを入力します。
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]
ここで
google-cloud-search-database-connector-v1-0.0.3.jar
は データベース コネクタの .jar ファイルmysql-connector-java-5.1.41-bin.jar
は、使用されている JDBC ドライバです。 データベースにアクセスするためにmysql.config
はカスタム名を持つ構成ファイルです。コネクタが コマンドラインでそのパスを指定します。それ以外の場合、コネクタはconnector-config.properties
(お住まいの地域) ディレクトリを指定します。
コネクタは、検出すると構成エラーを報告します。一部のエラーは
データベース列がレコード コンテンツの一部として定義されている場合など、コネクタが初期化する
(db.allColumns
内)であるものの、その列は
データベース(db.allRecordsSql
内)。その他のエラーは、次の場合にのみ検出、報告されます。
コネクタは最初の走査(SQL ステートメント構文が無効など)でデータベースにアクセスしようとします。
構成パラメータのリファレンス
データソースのアクセス パラメータ
設定 | パラメータ |
---|---|
データソース ID | api.sourceId = source-ID
必須。Cloud Search ソース ID。 |
ID ソースの ID | api.identitySourceId = identity-source-ID
ACL に外部のユーザーとグループを使用する場合に必要です。Cloud Search ID ソースの ID です。 |
サービス アカウント | api.serviceAccountPrivateKeyFile = path-to-private-key
必須。Cloud Search へのパス サービス アカウント キー ファイル。 |
データベース アクセス パラメータ
設定 | パラメータ |
---|---|
データベースの URL | db.url = database-URL
必須。「
アクセスするデータベースのフルパス( |
データベースのユーザー名とパスワード | db.user = username db.password = password
必須。コネクタがデータベースへのアクセスに使用する有効なユーザー名とパスワード。このデータベース ユーザーには、読み取り対象のデータベースの関連レコードに対する読み取りアクセス権が必要です。 |
JDBC ドライバ | db.driverClass = oracle.jdbc.OracleDriver
JDBC 4.0 ドライバがクラスパスでまだ指定されていない場合にのみ、必須です。 |
走査 SQL クエリ パラメータ
コネクタが SQL SELECT を使用してデータベース レコードを走査する クエリを記述できます。フル走査クエリを構成する必要があります。検索語句 増分走査は省略可能です
フル走査は、インデックス作成用に構成されたすべてのデータベース レコードを読み取ります。フル Cloud Search の新しいレコードをインデックス登録したり、インデックスを再作成したりするには、走査が必要です すべての既存レコードが抽出されます。
増分走査では、新しく変更されたデータベースのみを読み取り、インデックスを再登録します。 最近のエントリをデータベースに保存しています。増分走査は、 実現できます。増分走査を使用するには、データベースにタイムスタンプ フィールドが含まれている必要があります 示されます。
コネクタは、コネクタが定義したスケジュールに従って走査を実行します。 走査スケジュール パラメータ。
設定 | パラメータ |
---|---|
フル走査クエリ | db.allRecordsSql = SELECT column-1[, column-2,...] FROM database-name
必須。このクエリはフル走査ごとに実行されます。 コネクタがすべての列に対応する名前と 容量(コンテンツ、一意の ID、ACL)がクエリに含まれている必要があります。コネクタは、起動時に予備検証を行ってエラーや欠落を検出します。このため、一般的な「SELECT * FROM ...」は使用しないでください。 なります。 |
フル走査のページネーション | db.allRecordsSql.pagination = {none | offset}
値は次のいずれかです。
|
増分走査のクエリ | db.incrementalUpdateSql = SELECT column-1[, column-2,...] FROM database-name WHERE last_update_time > ?
増分走査をスケジュールする場合に必要です。 「?」タイムスタンプ値の必須のプレースホルダです。「 コネクタはタイムスタンプを使用して、増分走査の SQL クエリ間の変更を追跡します。 最終更新時刻のデータベースのタイムスタンプ列を追跡するには、
SQL ステートメントの 最初の増分走査では、コネクタの開始時間が使用されます。 最初の増分走査が行われると、Cloud Search は コネクタの再起動時に以前の増分走査にアクセスできる あります。 |
データベースのタイムゾーン | db.timestamp.timezone = America/Los_Angeles
データベースのタイムスタンプに使用するタイムゾーンを指定します。新規レコードの追加または新規レコードの識別に使用されるデータベースのタイムスタンプ 含まれるようになりました。デフォルトは、コネクタが実行されているローカル タイムゾーンです。 |
走査 SQL クエリの例
- 従業員データベース内のすべての対象レコードを読み取り、インデックス作成を行う基本的なフル走査クエリ:
db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \ FROM employee
- オフセットでページ分割を指定し、フル走査を複数のクエリに分割します。
SQL Server 2012 または Oracle 12c の場合(標準 SQL 2008 構文):
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
MySQL または 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
- エイリアスを使用して個々の ACL を適用するフル走査クエリ:
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
- 基本的な増分走査クエリ:
db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time \ FROM employee \ WHERE last_update_time > ?
- エイリアスを使用して個々の ACL を適用する増分走査のクエリ:
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 > ?
- 現在の時刻ではなくデータベースのタイムスタンプを使用する増分走査クエリ:
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 > ?
列定義パラメータ
次のパラメータでは、走査ステートメントで使用する列を指定し、 一意に識別できるからです
設定 | パラメータ |
---|---|
すべての列 | db.allColumns = column-1, column-2, ...column-N
必須。データベースにアクセスするときに SQL クエリで必要なすべての列を指定します。このパラメータで定義した列は、クエリで明示的に参照する必要があります。毎 他の列定義パラメータが、この列セットと比較されます。 例: db.allColumns = customer_id, first_name, last_name, phone, change_timestamp |
一意キーの列 | db.uniqueKeyColumns = column-1[, column-2]
必須。次のいずれかをリストします。 一意の値、または次の組み合わせで構成された単一のデータベース列 複数の列の値をまとめて一意の ID を定義します。 Cloud Search では、すべての検索可能なドキュメントにデータソース内で一意の識別子があることが必要です。データベース レコードごとに一意の ID を定義できる 取得できます。別々のデータベースで複数のコネクタを実行するが、 共通データセットに対するインデックスを作成するには、そのデータセットに一意の ID を すべてのドキュメントに対して適用されます。 例: db.uniqueKeyColumns = customer_id # or db.uniqueKeyColumns = last_name, first_name |
[URL リンク] 列 | url.columns = column-1[, column-2]
必須。定義された 1 つ以上の有効な クリック可能な検索結果に使用される URL に使用する列の名前。 各データベース レコードに関連付けられた関連 URL がないデータベースの場合、 静的リンクを使用できます。 ただし、列の値が各レコードの有効なリンクを定義する場合は、表示 URL の列と形式の構成値を指定する必要があります。 |
URL 形式 | url.format = https://www.example.com/{0}
表示 URL の形式を定義します。番号付きのパラメータは、db.columns で指定された列をゼロから順に参照します。 指定しない場合のデフォルトは「{0}」です。 次の表に例を示します。 |
URL のパーセントでエンコードされた列 | url.columnsToEscape = column-1[, column-2]
形式が設定された URL 文字列に挿入する前に値がパーセントでエンコードされる、db.columns の列を指定します。 |
URL の列の例
走査クエリで使用する列と表示 URL の形式を指定するには:
- データベース レコードの値を使用せずに静的 URL を使用するには:
url.format = https://www.example.com
- ビューの URL である単一の列値を使用するには:
url.format = {0} url.columns = customer_id
- 単一の列値を位置 {0} で表示 URL に代入するには、次のようにします。
url.format = https://www.example.com/customer/id={0} url.columns = customer_id url.columnsToEscape = customer_id
- 複数の列の値を使用して表示 URL を構築するには(列は順序に依存します):
url.format = {1}/customer={0} url.columns = customer_id, linked_url url.columnsToEscape = customer_id
コンテンツの項目
コンテンツ オプションを使用して、検索可能なコンテンツの一部にするレコード値を定義します。
設定 | パラメータ |
---|---|
最高品質の検索列 | contentTemplate.db.title = column-name
必須。検索インデックスと結果の優先順位付けのための最高品質の列。 |
検索用の列の優先順位付け | contentTemplate.db.quality.high = column-1[, column-2...] contentTemplate.db.quality.medium = column-1[, column-2...] contentTemplate.db.quality.low = column-1[, column-2...]
コンテンツ列を指定( |
コンテンツ データ列 | db.contentColumns = column-1[, column-2...]
データベースのコンテンツ列を指定します。これらは形式化された 検索可能なドキュメント コンテンツとして Cloud Search にアップロードされます。 値を指定しない場合、デフォルトは「*」です。すべての Pod が 列を使用する必要があることを示しています。 |
blob 列 | db.blobColumn = column-name
単一の blob の名前を指定する 列の組み合わせではなく、ドキュメントのコンテンツに使用する列を指定します。 blob 列が指定されている場合、コンテンツ列も定義されていると、エラーとみなされます。ただし、メタデータと構造化データの列定義は blob 列とともに使用できます。 |