Cloud Search チュートリアルのこのページでは、データをインデックス登録するためにデータソースとコンテンツ コネクタを設定する方法について説明します。このチュートリアルの最初から開始するには、Cloud Search スタートガイド チュートリアルをご覧ください。
コネクタをビルドする
作業ディレクトリを cloud-search-samples/end-to-end/connector
ディレクトリに変更し、次のコマンドを実行します。
mvn package -DskipTests
このコマンドにより、コンテンツ コネクタのビルドに必要な依存関係がダウンロードされ、コードがコンパイルされます。
サービス アカウントの認証情報を作成する
コネクタには、Cloud Search API を呼び出すためのサービス アカウントの認証情報が必要です。認証情報を作成するには:
- Google Cloud コンソールに戻ります。
- 左側のナビゲーションで、[認証情報] をクリックします。[認証情報] ページが表示されます。
- [+ 認証情報を作成] プルダウン リストをクリックし、[サービス アカウント] を選択します。[サービス アカウントの作成] ページが表示されます。
- [サービス アカウント名] フィールドに「tutorial」と入力します。
- サービス アカウント名の直後にあるサービス アカウント ID の値をメモします。この値は後で使用されます。
- [作成] をクリックします。[サービス アカウントの権限(オプション)] ダイアログが表示されます。
- [続行] をクリックします[ユーザーにこのサービス アカウントへのアクセスを許可(省略可)] ダイアログが表示されます。
- [完了] をクリックします。[認証情報] 画面が表示されます。
- [サービス アカウント] で、サービス アカウントのメールアドレスをクリックします。[サービス アカウントの詳細] ページが表示されます。
- [キー] で [鍵を追加] プルダウン リストをクリックし、[新しい鍵を作成] を選択します。[秘密鍵の作成] ダイアログが表示されます。
- [作成] をクリックします。
- (省略可)[console.cloud.google.com でのダウンロードを許可しますか?] ダイアログが表示されたら、[許可] をクリックします。
- 秘密鍵ファイルがパソコンに保存されます。ダウンロードしたファイルの場所をメモします。このファイルは、Google Cloud Search API を呼び出すときに自身を認証できるようにコンテンツ コネクタを構成するために使用されます。
サードパーティ サポートを初期化する
他の Cloud Search API を呼び出す前に、Google Cloud Search のサードパーティ サポートを初期化する必要があります。
Cloud Search のサードパーティ サポートを初期化するには:
Cloud Search プラットフォーム プロジェクトには、サービス アカウントの認証情報が含まれています。ただし、サードパーティのサポートを初期化するために、ウェブ アプリケーションの認証情報を作成する必要があります。ウェブ アプリケーションの認証情報を作成する方法については、認証情報を作成するをご覧ください。この手順を完了すると、クライアント ID とクライアント シークレット ファイルが作成されます。
Google の OAuth 2 Playground を使用してアクセス トークンを取得します。
- [設定] をクリックし、[User your own auth credentials] をオンにします。
- ステップ 1 のクライアント ID とクライアント シークレットを入力します。
- [Close] をクリックします。
- スコープ フィールドに「
https://www.googleapis.com/auth/cloud_search.settings
」と入力し、[承認] をクリックします。OAuth 2 Playground から認証コードが返されます。 - [Exchange authorization code for token] をクリックします。トークンが返されます。
Cloud Search に対するサードパーティ サポートを初期化するには、次の curl コマンドを使用します。
[YOUR_ACCESS_TOKEN]
は、手順 2 で取得したトークンに置き換えてください。curl --request POST \ 'https://cloudsearch.googleapis.com/v1:initializeCustomer' \ --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '{}' \ --compressed
成功した場合、レスポンスの本文には
operation
のインスタンスが含まれます。次に例を示します。{ name: "operations/customers/01b3fqdm/lro/AOIL6eBv7fEfiZ_hUSpm8KQDt1Mnd6dj5Ru3MXf-jri4xK6Pyb2-Lwfn8vQKg74pgxlxjrY" }
解決しない場合は、Cloud Search サポートにお問い合わせください。
operations.get を使用して、サードパーティ サポートが初期化されていることを確認します。
curl \ 'https://cloudsearch.googleapis.com/v1/operations/customers/01b3fqdm/lro/AOIL6eBv7fEfiZ_hUSpm8KQDt1Mnd6dj5Ru3MXf-jri4xK6Pyb2-Lwfn8vQKg74pgxlxjrY?key= [YOUR_API_KEY]' \ --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ --header 'Accept: application/json' \ --compressed
サードパーティの初期化が完了すると、フィールド
done
がtrue
に設定されます。次に例を示します。{ name: "operations/customers/01b3fqdm/lro/AOIL6eBv7fEfiZ_hUSpm8KQDt1Mnd6dj5Ru3MXf-jri4xK6Pyb2-Lwfn8vQKg74pgxlxjrY" done: true }
データソースを作成する
次に、管理コンソールでデータソースを作成します。データソースは、コネクタを使用してコンテンツをインデックスに登録するための名前空間を提供します。
- Google 管理コンソールを開きます。
- アプリアイコンをクリックします。[アプリの管理] ページが表示されます。
- [Google Workspace] をクリックします。[Apps Google Workspace 管理] ページが表示されます。
- 下にスクロールして [Cloud Search] をクリックします。[Google Workspace の設定] ページが表示されます。
- [サードパーティのデータソース] をクリックします。[データソース] ページが表示されます。
- 黄色の丸い + をクリックします。[新しいデータソースを追加] ダイアログが表示されます。
- [表示名] フィールドに「tutorial」と入力します。
- [サービス アカウントのメールアドレス] フィールドに、前のセクションで作成したサービス アカウントのメールアドレスを入力します。サービス アカウントのメールアドレスがわからない場合は、サービス アカウントのページで値を確認します。
- [追加] をクリックします。[データソースを作成しました] ダイアログが表示されます。
- [*OK] をクリックします。新しく作成されたデータソースのソース ID をメモします。ソース ID はコンテンツ コネクタの設定に使用されます。
GitHub API 用の個人用アクセス トークンを生成する
十分な割り当てを確保するため、コネクタには GitHub API への認証済みアクセスが必要です。わかりやすくするため、コネクタでは OAuth ではなく個人用のアクセス トークンを利用します。個人トークンを使用すると、OAuth と同様に、限定された権限セットを持つユーザーとして認証を行うことができます。
- GitHub にログインします。
- 右上にあるプロフィール写真をクリックします。プルダウン メニューが表示されます。
- [設定] をクリックします。
- [デベロッパー向けの設定] をクリックします。
- [個人用アクセス トークン] をクリックします。
- [Generate personal access token] をクリックします。
- [Note] フィールドに「Cloud Searchtutorial」と入力します。
- public_repo スコープを確認します。
- [Generate token] をクリックします。
- 生成されたトークンをメモします。コネクタは GitHub API を呼び出し、インデックス登録を実行するための API 割り当てを提供します。
コネクタを構成する
認証情報とデータソースを作成したら、次の値が含まれるようにコネクタ構成を更新します。
- コマンドラインで
cloud-search-samples/end-to-end/connector/
ディレクトリに移動します。 - テキスト エディタで
sample-config.properties
ファイルを開きます。 api.serviceAccountPrivateKeyFile
パラメータを、先ほどダウンロードしたサービス認証情報のファイルパスに設定します。api.sourceId
パラメータを、先ほど作成したデータソースの ID に設定します。github.user
パラメータを GitHub ユーザー名に設定します。- 以前に作成したアクセス トークンに
github.token
パラメータを設定します。 - ファイルを保存します。
スキーマを更新する
コネクタは、構造化コンテンツと非構造化コンテンツの両方をインデックスに登録します。データをインデックスに登録する前に、データソースのスキーマを更新する必要があります。次のコマンドを実行してスキーマを更新します。
mvn exec:java -Dexec.mainClass=com.google.cloudsearch.tutorial.SchemaTool \
-Dexec.args="-Dconfig=sample-config.properties"
コネクタを実行する
コネクタを実行してインデックス登録を開始するには、次のコマンドを実行します。
mvn exec:java -Dexec.mainClass=com.google.cloudsearch.tutorial.GithubConnector \
-Dexec.args="-Dconfig=sample-config.properties"
コネクタのデフォルト構成では、googleworkspace
組織内の単一のリポジトリがインデックスに登録されます。リポジトリのインデックス登録には約 1 分かかります。最初のインデックス登録の後、コネクタは Cloud Search インデックスに反映する必要があるリポジトリの変更を引き続きポーリングします。
コードの確認
残りのセクションでは、コネクタの構築方法について説明します。
アプリケーションの起動
コネクタのエントリ ポイントは GithubConnector
クラスです。main
メソッドは、SDK の IndexingApplication
をインスタンス化して起動します。
SDK が提供する ListingConnector
は、Cloud Search キューを利用してインデックス内のアイテムの状態を追跡する走査戦略を実装します。GitHub のコンテンツにアクセスするために、サンプル コネクタによって実装された GithubRepository
にデリゲートします。
GitHub リポジトリの走査
フル走査中に、インデックス登録が必要なアイテムをキューに push するために getIds()
メソッドが呼び出されます。
コネクタは、複数のリポジトリまたは組織をインデックスに登録できます。障害の影響を最小限に抑えるため、一度に 1 つの GitHub リポジトリを走査します。チェックポイントは、後続の getIds()
の呼び出しでインデックスに登録するリポジトリのリストを含む走査の結果とともに返されます。エラーが発生した場合、インデックス登録は最初からではなく、現在のリポジトリで再開されます。
collectRepositoryItems()
メソッドは、単一の GitHub リポジトリの走査を処理します。このメソッドは、キューに push されるアイテムを表す ApiOperations
のコレクションを返します。アイテムは、リソース名およびアイテムの現在の状態を表すハッシュ値として push されます。
ハッシュ値は GitHub リポジトリの後続の走査で使用されます。この値は、追加のコンテンツをアップロードせずに、コンテンツが変更されたかどうかを判断するための簡単なチェックを提供します。コネクタは、すべてのアイテムをやみくもにキューに入れます。アイテムが新しい場合、またはハッシュ値が変更された場合は、キュー内のポーリングに使用できるようになります。それ以外の場合、アイテムは未改変とみなされます。
キューの処理
フル走査が完了すると、コネクタはキューへのポーリングを開始し、インデックス登録する必要があるアイテムを特定します。getDoc()
メソッドは、キューから取得されるアイテムごとに呼び出されます。このメソッドは、GitHub からアイテムを読み取り、インデックス登録のための適切な表現に変換します。
コネクタは随時変更される可能性のあるライブデータに対して実行されるため、getDoc()
はキュー内のアイテムがまだ有効であることを確認し、インデックスから存在しなくなったアイテムを削除します。
コネクタがインデックスに登録する GitHub オブジェクトごとに、対応する indexItem()
メソッドが Cloud Search 用のアイテム表現の作成を処理します。たとえば、コンテンツ アイテムの表現を作成するには、次のようにします。
次に、検索インターフェースをデプロイします。