コンテンツ コネクタを作成する

コンテンツ コネクタは、企業のリポジトリ内のデータを走査して所定のデータソースを完成する目的で使われるソフトウェア プログラムです。Google は、コンテンツ コネクタを開発するためのオプションを提供しています。

  • Content Connector SDK。これは Java プログラマーに適したオプションです。SDK は、コネクタをすばやく作成するための REST API を簡単に使えるようにしたラッパーです。この SDK でコンテンツ コネクタを作成するには、Content Connector SDK を使用してコンテンツ コネクタを作成するをご覧ください。

  • 低レベル REST API、その他の各種の API ライブラリ。Java を使用していない場合や、コードベースが REST API やライブラリに問題なく対応できる場合は、これらのオプションをご利用ください。この REST API を使用してコンテンツ コネクタを作成する場合は、REST API を使用してコンテンツ コネクタを作成するをご覧ください。

コンテンツ コネクタで行われる標準的なタスクは次のとおりです。

  1. 構成パラメータを読み取り、処理する。
  2. インデックス登録可能な離散的なデータチャンク(これを「アイテム」と呼びます)をサードパーティのリポジトリから pull する。
  3. ACL、メタデータ、コンテンツ データを結合して、インデックス登録可能なアイテムを作成する。
  4. アイテムを Cloud Search データソースにインデックス登録する。
  5. (省略可)リポジトリからの変更通知をリッスンします。変更通知はインデックス登録リクエストに変換され、Cloud Search データソースの同期が維持されます。なお、コンテンツ コネクタによるこのタスクは、リポジトリが変更検出機能に対応している場合にのみ行われます。

Content Connector SDK を使用してコンテンツ コネクタを作成する

以降のセクションでは、Content Connector SDK を使用してコンテンツ コネクタを作成する方法について説明します。

依存関係を設定する

これらの依存関係をビルドファイルに含めます。

Maven

xml <dependency> <groupId>com.google.enterprise.cloudsearch</groupId> <artifactId>google-cloudsearch-indexing-connector-sdk</artifactId> <version>v1-0.0.3</version> </dependency>

Gradle

groovy compile group: 'com.google.enterprise.cloudsearch', name: 'google-cloudsearch-indexing-connector-sdk', version: 'v1-0.0.3'

コネクタ構成を作成する

すべてのコネクタは、リポジトリ ID などのパラメータに構成ファイルを使用します。パラメータを api.sourceId=1234567890abcdef などの Key-Value ペアとして定義します。

Google Cloud Search SDK には、すべてのコネクタ用の Google 提供のパラメータが含まれています。構成ファイルで次のことを宣言する必要があります。

  • コンテンツ コネクタ: api.sourceIdapi.serviceAccountPrivateKeyFile を宣言します。これらは、リポジトリとアクセスに必要な秘密鍵を識別します。
  • ID コネクタ: 外部 ID ソースを識別するために api.identitySourceId を宣言します。ユーザーの同期では、api.customerId(Google Workspace アカウントの固有 ID)も宣言します。

他の Google 提供パラメータは、デフォルト値をオーバーライドする場合にのみ宣言します。ID と鍵の生成について詳しくは、Google 提供のパラメータをご覧ください。

構成ファイルでリポジトリ固有のパラメータを定義することもできます。

構成ファイルをコネクタに渡す

構成ファイルを渡すように config システム プロパティを設定します。コネクタを起動するときに -D 引数を使用します。次に例を示します。

java -classpath myconnector.jar -Dconfig=MyConfig.properties MyConnector

この引数を省略すると、SDK はローカル ディレクトリ内の connector-config.properties という名前のファイルを使用しようとします。

使用する走査戦略を決める

コンテンツ コネクタの主な機能は、リポジトリを走査してそのデータをインデックス登録することです。リポジトリのサイズとレイアウトに基づいて戦略を実装する必要があります。独自の戦略を設計することも、SDK の戦略を選択することもできます。

フル走査戦略
リポジトリ全体をスキャンして、すべてのアイテムをインデックス登録します。この戦略は、インデックス登録のたびにフル走査のオーバーヘッドを許容できる小規模なリポジトリに最適です。概ね静的で階層構造を持たないデータを含む小規模なリポジトリや、変更検出が困難な場合に使用します。
リスト走査戦略
リポジトリ全体をスキャンして各アイテムのステータスを確認した後、新規または更新されたアイテムのみをインデックス登録します。変更検出がサポートされていない場合に、大規模な非階層インデックスの増分更新に使用します。
グラフ トラバーサル
親ノードをスキャンしてアイテムのステータスを確認し、そのノード内の新しいアイテムまたは更新されたアイテムのインデックスを作成します。次に、子ノードを再帰的に処理します。これは、ディレクトリ構造やウェブサイトなど、すべての ID をリストすることが現実的でない階層型リポジトリに使用します。

SDK は、これらの戦略をテンプレート コネクタ クラスに実装します。これらのテンプレートを使用すると、開発を迅速に進めることができます。テンプレートを使用するには、対応するセクションをご覧ください。

テンプレート クラスを使用してフル走査コネクタを作成する

このセクションでは、FullTraversalSample のコードについて説明します。

コネクタのエントリ ポイントを実装する

エントリ ポイントは main() メソッドです。Application インスタンスを作成し、start() を呼び出してコネクタを実行します。

application.start() を呼び出す前に、IndexingApplication.Builder クラスを使用して FullTraversalConnector テンプレートをインスタンス化します。このテンプレートは Repository オブジェクトを受け取ります。

FullTraversalSample.java
/**
 * This sample connector uses the Cloud Search SDK template class for a full
 * traversal connector.
 *
 * @param args program command line arguments
 * @throws InterruptedException thrown if an abort is issued during initialization
 */
public static void main(String[] args) throws InterruptedException {
  Repository repository = new SampleRepository();
  IndexingConnector connector = new FullTraversalConnector(repository);
  IndexingApplication application = new IndexingApplication.Builder(connector, args).build();
  application.start();
}

SDK は、main() メソッドが Application.build() を呼び出した後に initConfig() を呼び出します。initConfig() メソッド:

  1. Configuration が初期化されていないことを確認します。
  2. Google 提供の Key-Value ペアで Configuration オブジェクトを初期化します。

Repository インターフェースを実装する

Repository オブジェクトは、リポジトリ アイテムを走査してインデックス登録します。テンプレートを使用する場合は、Repository インターフェースの一部のメソッドをオーバーライドするだけで済みます。FullTraversalConnector の場合、以下をオーバーライドします。

  • init(): リポジトリの設定と初期化。
  • getAllDocs(): すべてのアイテムをトラバースしてインデックス登録します。これは、スケジュールされた走査ごとに 1 回呼び出されます。
  • (省略可)getChanges(): リポジトリが変更検出機能をサポートしている場合、変更されたアイテムを取得してインデックスに登録するために、このメソッドをオーバーライドします。
  • (省略可)close(): シャットダウン時のリポジトリのクリーンアップ。

各メソッドは ApiOperation オブジェクトを返します。このオブジェクトは IndexingService.indexItem() を使用してインデックス登録を行います。

カスタム構成パラメータを取得する

コネクタの構成を処理するには、Configuration オブジェクトからカスタム パラメータを取得する必要があります。このタスクは、Repository クラスの init() メソッドで実行します。

Configuration クラスには、さまざまなデータ型を取得するメソッドが含まれています。各メソッドは ConfigValue オブジェクトを返します。ConfigValue オブジェクトの get() メソッドを使用して値を取得します。FullTraversalSample の次のスニペットは、カスタム整数値を取得する方法を示しています。

FullTraversalSample.java
@Override
public void init(RepositoryContext context) {
  log.info("Initializing repository");
  numberOfDocuments = Configuration.getInteger("sample.documentCount", 10).get();
}

複数の値を持つパラメータを取得して解析するには、Configuration クラスのいずれかの型パーサーを使用します。チュートリアル コネクタの次のスニペットは、getMultiValue を使用して GitHub リポジトリの名前のリストを取得します。

GithubRepository.java
ConfigValue<List<String>> repos = Configuration.getMultiValue(
    "github.repos",
    Collections.emptyList(),
    Configuration.STRING_PARSER);

フル走査を実行する

getAllDocs() をオーバーライドして、フル走査を実行します。このメソッドは、中断された場合にインデックス登録を再開するためのチェックポイントを受け取ります。各アイテムについて:

  1. アクセス許可を設定する。
  2. メタデータを設定します。
  3. それらを RepositoryDoc に結合します。
  4. 各アイテムを getAllDocs() から返されるイテレータにパッケージ化します。

アイテム セットが 1 回の呼び出しで処理するには大きすぎる場合は、チェックポイントを使用して hasMore(true) を呼び出します。

アイテムへのアクセス許可を設定する

リポジトリは、アイテムにアクセスできるユーザーまたはグループを識別するためにアクセス制御リスト(ACL)を使用します。ACL には、承認されたユーザーまたはグループの ID がリストされます。

ユーザーにアクセス権のある検索結果のみが表示されるようにするには、リポジトリの ACL を複製する必要があります。Google Cloud Search が適切なアクセスレベルを提供できるように、アイテムをインデックス登録するときに ACL を含めます。

Content Connector SDK には、ほとんどのリポジトリの ACL をモデル化するためのクラスとメソッドが含まれています。リポジトリの ACL を分析し、インデックス登録時に Cloud Search の対応する ACL を作成します。継承を使用するなどの複雑な ACL をモデル化するには、慎重な計画が必要です。詳細については、Cloud Search の ACL をご覧ください。

アクセスを設定するには、Acl.Builder クラスを使用します。完全なトラバーサル サンプルの次のスニペットでは、すべてのドメイン ユーザー(getCustomerPrincipal())がすべてのアイテム(setReaders())を読み取ることができます。

FullTraversalSample.java
// Make the document publicly readable within the domain
Acl acl = new Acl.Builder()
    .setReaders(Collections.singletonList(Acl.getCustomerPrincipal()))
    .build();

リポジトリの ACL(特に継承モデルを使用する ACL)を適切にモデル化するには、Cloud Search の ACL の情報が必要です。

アイテムのメタデータを設定する

メタデータは Item オブジェクトに格納されます。Item を作成するには、一意の ID、アイテムタイプ、ACL、URL、バージョンが必要です。IndexingItemBuilder ヘルパークラスを使用します。

FullTraversalSample.java
// Url is required. Use google.com as a placeholder for this sample.
String viewUrl = "https://www.google.com";

// Version is required, set to current timestamp.
byte[] version = Longs.toByteArray(System.currentTimeMillis());

// Using the SDK item builder class to create the document with appropriate attributes
// (this can be expanded to include metadata fields etc.)
Item item = IndexingItemBuilder.fromConfiguration(Integer.toString(id))
    .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
    .setAcl(acl)
    .setSourceRepositoryUrl(IndexingItemBuilder.FieldOrValue.withValue(viewUrl))
    .setVersion(version)
    .build();
インデックス登録可能なアイテムを作成する

RepositoryDoc.Builder クラスを使用します。

FullTraversalSample.java
// For this sample, content is just plain text
String content = String.format("Hello world from sample doc %d", id);
ByteArrayContent byteContent = ByteArrayContent.fromString("text/plain", content);

// Create the fully formed document
RepositoryDoc doc = new RepositoryDoc.Builder()
    .setItem(item)
    .setContent(byteContent, IndexingService.ContentFormat.TEXT)
    .build();

RepositoryDoc は、IndexingService.indexItem() リクエストを実行する ApiOperation です。

RepositoryDoc.Builder クラスの setRequestMode() メソッドを使用して、インデックス登録リクエストを ASYNCHRONOUS または SYNCHRONOUS に設定します。

ASYNCHRONOUS
このモードでは、インデックス登録してから結果を得るまでのレイテンシは長くなりますが、処理割り当て量の供給が増えます。リポジトリ全体の最初のインデックス登録(バックフィル)には非同期モードを使用します。
SYNCHRONOUS
このモードでは、インデックス登録してから結果を得るまでのレイテンシは短くなりますが、スループットの割り当ては小さくなります。リポジトリの更新や変更をインデックス登録する場合は、同期モードを使用します。指定しない場合、リクエスト モードはデフォルトで SYNCHRONOUS になります。
イテレータ内のインデックス登録可能な各アイテムをパッケージ化する

getAllDocs() メソッドは、RepositoryDoc オブジェクトの CheckpointCloseableIterable を返します。CheckpointCloseableIterableImpl.Builder クラスを使用します。

FullTraversalSample.java
CheckpointCloseableIterable<ApiOperation> iterator =
  new CheckpointCloseableIterableImpl.Builder<>(allDocs).build();

次のステップ

テンプレート クラスを使用してリスト走査コネクタを作成する

Cloud Search インデックス登録キューは、リポジトリ アイテムの ID と必要に応じてハッシュを保持します。リスト走査コネクタは、ID をこのキューに push し、インデックス登録のためにそれらの ID を取得します。Cloud Search は、これらのキューを維持管理して、削除などのアイテムのステータスを判断します。Cloud Search インデックス登録キューをご覧ください。

このセクションでは、ListTraversalSample について説明します。

コネクタのエントリ ポイントを実装する

main() メソッドは Application インスタンスを作成し、start() を呼び出します。IndexingApplication.Builder を使用して ListingConnector テンプレートをインスタンス化します。

ListTraversalSample.java
/**
 * This sample connector uses the Cloud Search SDK template class for a
 * list traversal connector.
 *
 * @param args program command line arguments
 * @throws InterruptedException thrown if an abort is issued during initialization
 */
public static void main(String[] args) throws InterruptedException {
  Repository repository = new SampleRepository();
  IndexingConnector connector = new ListingConnector(repository);
  IndexingApplication application = new IndexingApplication.Builder(connector, args).build();
  application.start();
}

Repository インターフェースを実装する

ListingConnector の次のメソッドをオーバーライドします。

  • init(): リポジトリの設定。
  • getIds(): すべてのレコードの ID とハッシュを取得します。
  • getDoc(): インデックスからアイテムを追加、更新、削除します。
  • (省略可)getChanges(): 変更検出を使用した増分更新。
  • (省略可)close(): リポジトリのクリーンアップ。

リスト走査を実行する

getIds() をオーバーライドして、ID とハッシュを取得します。getDoc() をオーバーライドして、Cloud Search インデックス登録キュー内の各アイテムを処理します。

アイテムの ID とハッシュ値を push する

getIds() をオーバーライドして、ID とコンテンツのハッシュをフェッチします。それらを PushItems リクエストにパッケージ化して、インデックス キューに送信します。

ListTraversalSample.java
PushItems.Builder allIds = new PushItems.Builder();
for (Map.Entry<Integer, Long> entry : this.documents.entrySet()) {
  String documentId = Integer.toString(entry.getKey());
  String hash = this.calculateMetadataHash(entry.getKey());
  PushItem item = new PushItem().setMetadataHash(hash);
  log.info("Pushing " + documentId);
  allIds.addPushItem(documentId, item);
}

PushItems.Builder を使用して ID とハッシュをパッケージ化します。

ListTraversalSample.java
ApiOperation pushOperation = allIds.build();
CheckpointCloseableIterable<ApiOperation> iterator =
  new CheckpointCloseableIterableImpl.Builder<>(
      Collections.singletonList(pushOperation))
  .build();
return iterator;
各アイテムを取得して処理する

getDoc() をオーバーライドして、インデックス登録キュー内のアイテムを処理します。アイテムには新規のアイテム、変更済みのアイテム、未変更のアイテム、削除済みのアイテムがあります。

  1. アイテム ID がリポジトリに存在するかどうかを確認します。必要でなければ削除します。
  2. インデックスのステータスをポーリングします。変更がない場合(ACCEPTED)、何もしません。
  3. 変更済みまたは新規のアイテムをインデックス登録する: 権限を設定し、メタデータを設定して、RepositoryDoc に結合して返します。
削除対象のアイテムを処理する

このスニペットは、アイテムが存在するかどうかを確認し、存在しない場合は削除する方法を示しています。

ListTraversalSample.java
String resourceName = item.getName();
int documentId = Integer.parseInt(resourceName);

if (!documents.containsKey(documentId)) {
  // Document no longer exists -- delete it
  log.info(() -> String.format("Deleting document %s", item.getName()));
  return ApiOperations.deleteItem(resourceName);
}
未変更のアイテムを処理する

インデックス登録キューをポーリングして、未変更のアイテムを処理します。

ListTraversalSample.java
String currentHash = this.calculateMetadataHash(documentId);
if (this.canSkipIndexing(item, currentHash)) {
  // Document neither modified nor deleted, ack the push
  log.info(() -> String.format("Document %s not modified", item.getName()));
  PushItem pushItem = new PushItem().setType("NOT_MODIFIED");
  return new PushItems.Builder().addPushItem(resourceName, pushItem).build();
}

この例では、ハッシュを使用して変更を検出します。

ListTraversalSample.java
/**
 * Checks to see if an item is already up to date
 *
 * @param previousItem Polled item
 * @param currentHash  Metadata hash of the current github object
 * @return PushItem operation
 */
private boolean canSkipIndexing(Item previousItem, String currentHash) {
  if (previousItem.getStatus() == null || previousItem.getMetadata() == null) {
    return false;
  }
  String status = previousItem.getStatus().getCode();
  String previousHash = previousItem.getMetadata().getHash();
  return "ACCEPTED".equals(status)
      && previousHash != null
      && previousHash.equals(currentHash);
}
アイテムへのアクセス許可を設定する

リポジトリは、アイテムにアクセスできるユーザーまたはグループを識別するためにアクセス制御リスト(ACL)を使用します。ACL には、承認されたユーザーまたはグループの ID がリストされます。

ユーザーにアクセス権のある検索結果のみが表示されるようにするには、リポジトリの ACL を複製する必要があります。Google Cloud Search が適切なアクセスレベルを提供できるように、アイテムをインデックス登録するときに ACL を含めます。

Content Connector SDK には、ほとんどのリポジトリの ACL をモデル化するためのクラスとメソッドが含まれています。リポジトリの ACL を分析し、インデックス登録時に Cloud Search の対応する ACL を作成します。継承を使用するなどの複雑な ACL をモデル化するには、慎重な計画が必要です。詳細については、Cloud Search の ACL をご覧ください。

アクセスを設定するには、Acl.Builder クラスを使用します。完全なトラバーサル サンプルの次のスニペットでは、すべてのドメイン ユーザー(getCustomerPrincipal())がすべてのアイテム(setReaders())を読み取ることができます。

FullTraversalSample.java
// Make the document publicly readable within the domain
Acl acl = new Acl.Builder()
    .setReaders(Collections.singletonList(Acl.getCustomerPrincipal()))
    .build();

リポジトリの ACL(特に継承モデルを使用する ACL)を適切にモデル化するには、Cloud Search の ACL の情報が必要です。

アイテムのメタデータを設定する
ListTraversalSample.java
// Url is required. Use google.com as a placeholder for this sample.
String viewUrl = "https://www.google.com";

// Version is required, set to current timestamp.
byte[] version = Longs.toByteArray(System.currentTimeMillis());

// Set metadata hash so queue can detect changes
String metadataHash = this.calculateMetadataHash(documentId);

// Using the SDK item builder class to create the document with
// appropriate attributes. This can be expanded to include metadata
// fields etc.
Item item = IndexingItemBuilder.fromConfiguration(Integer.toString(documentId))
    .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
    .setAcl(acl)
    .setSourceRepositoryUrl(IndexingItemBuilder.FieldOrValue.withValue(viewUrl))
    .setVersion(version)
    .setHash(metadataHash)
    .build();
インデックス登録可能なアイテムを作成する
ListTraversalSample.java
// For this sample, content is just plain text
String content = String.format("Hello world from sample doc %d", documentId);
ByteArrayContent byteContent = ByteArrayContent.fromString("text/plain", content);

// Create the fully formed document
RepositoryDoc doc = new RepositoryDoc.Builder()
    .setItem(item)
    .setContent(byteContent, IndexingService.ContentFormat.TEXT)
    .build();

RepositoryDoc.Builder クラスの setRequestMode() メソッドを使用して、インデックス登録リクエストを ASYNCHRONOUS または SYNCHRONOUS に設定します。

ASYNCHRONOUS
このモードでは、インデックス登録してから結果を得るまでのレイテンシは長くなりますが、処理割り当て量の供給が増えます。リポジトリ全体の最初のインデックス登録(バックフィル)には非同期モードを使用します。
SYNCHRONOUS
このモードでは、インデックス登録してから結果を得るまでのレイテンシは短くなりますが、スループットの割り当ては小さくなります。リポジトリの更新や変更をインデックス登録する場合は、同期モードを使用します。指定しない場合、リクエスト モードはデフォルトで SYNCHRONOUS になります。

次のステップ

必要に応じて次の手順を行います。

  • (省略可)シャットダウンの前にリソースをすべて解放する close() メソッドを実装する。
  • (省略可)Content Connector SDK で ID コネクタを作成する

テンプレート クラスを使用してグラフ走査コネクタを作成する

Cloud Search インデックス登録キューは、リポジトリ内の各アイテムの ID(および必要に応じてハッシュ値)を保持します。グラフ走査コネクタは、Google Cloud Search インデックス登録キューにアイテム ID を push し、インデックス登録のためにそこから 1 つずつ取得します。Google Cloud Search はキューを維持管理し、キューの内容を比較することでアイテムのステータス(アイテムがリポジトリから削除済みかどうかなど)を確認します。Cloud Search インデックス登録キューの詳細については、Google Cloud Search インデックス登録キューをご覧ください。

インデックス登録の過程で、アイテムのコンテンツがデータ リポジトリからフェッチされ、すべての子アイテムの ID がキューに push されます。コネクタによる親 ID と子 ID の処理は、すべてのアイテムが処理されるまで再帰的に進行します。

コネクタのエントリ ポイントを実装する

コネクタのエントリ ポイントは main() メソッドです。このメソッドは、Application クラスのインスタンスを作成し、その start() メソッドを呼び出してコネクタを実行します。

application.start() を呼び出す前に、IndexingApplication.Builder クラスを使用して ListingConnector テンプレートをインスタンス化します。ListingConnector は、実装するメソッドを含む Repository オブジェクトを受け取って処理します。

Repository インターフェースを実装する

init()getIds()getDoc() をオーバーライドします。必要に応じて、getChanges() または close() をオーバーライドします。

グラフ走査を実行する

getIds() をオーバーライドして初期 ID を取得し、getDoc() をオーバーライドしてアイテムを処理し、子 ID をキューに push します。

アイテムの ID とハッシュ値を push する
GraphTraversalSample.java
PushItems.Builder allIds = new PushItems.Builder();
PushItem item = new PushItem();
allIds.addPushItem("root", item);
各アイテムを取得して処理する
  1. ID がリポジトリに存在するかどうかを確認します。存在しない場合は、アイテムを削除します。
  2. 既存のアイテムについては、権限とメタデータを設定し、それらを RepositoryDoc に結合します。
  3. 子の ID をインデックス登録キューに push します。
  4. RepositoryDoc を返します。
削除対象のアイテムを処理する
GraphTraversalSample.java
String resourceName = item.getName();
if (documentExists(resourceName)) {
  return buildDocumentAndChildren(resourceName);
}
// Document doesn't exist, delete it
log.info(() -> String.format("Deleting document %s", resourceName));
return ApiOperations.deleteItem(resourceName);
メタデータを設定してアイテムを作成する
GraphTraversalSample.java
// Url is required. Use google.com as a placeholder for this sample.
String viewUrl = "https://www.google.com";

// Version is required, set to current timestamp.
byte[] version = Longs.toByteArray(System.currentTimeMillis());

// Using the SDK item builder class to create the document with
// appropriate attributes. This can be expanded to include metadata
// fields etc.
Item item = IndexingItemBuilder.fromConfiguration(documentId)
    .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
    .setAcl(acl)
    .setSourceRepositoryUrl(IndexingItemBuilder.FieldOrValue.withValue(viewUrl))
    .setVersion(version)
    .build();
GraphTraversalSample.java
// For this sample, content is just plain text
String content = String.format("Hello world from sample doc %s", documentId);
ByteArrayContent byteContent = ByteArrayContent.fromString("text/plain", content);

RepositoryDoc.Builder docBuilder = new RepositoryDoc.Builder()
    .setItem(item)
    .setContent(byteContent, IndexingService.ContentFormat.TEXT);
インデックス登録キューに子 ID を入れる
GraphTraversalSample.java
// Queue the child nodes to visit after indexing this document
Set<String> childIds = getChildItemNames(documentId);
for (String id : childIds) {
  log.info(() -> String.format("Pushing child node %s", id));
  PushItem pushItem = new PushItem();
  docBuilder.addChildId(id, pushItem);
}

RepositoryDoc doc = docBuilder.build();

REST API を使用してコンテンツ コネクタを作成する

以下のセクションでは、REST API を使用してコンテンツ コネクタを作成する方法を説明します。

使用する走査戦略を決める

戦略(Full、List、Graph)は、SDK の場合と同じです。REST API を使用して、選択した戦略を実装します。

走査戦略を実装しアイテムをインデックス登録する

スキーマを登録し、次の方法でインデックスを挿入します。

  1. (省略可)100 KiB を超えるファイルの場合は items.upload
  2. (省略可)メディア ファイルの media.upload
  3. items.index を使用してアイテムをインデックス登録します。

    インデックス登録リクエストの例:

    {
      "name": "datasource/<data_source_id>/items/titanic",
      "acl": {
        "readers": [
          {
            "gsuitePrincipal": {
              "gsuiteDomain": true
            }
          }
        ]
      },
      "metadata": {
        "title": "Titanic",
        "viewUrl": "http://www.imdb.com/title/tt2234155/",
        "objectType": "movie"
      },
      "structuredData": {
        "object": {
          "properties": [
            {
              "name": "movieTitle",
              "textValues": { "values": ["Titanic"] }
            }
          ]
        }
      },
      "content": {
        "inlineContent": "A seventeen-year-old aristocrat falls in love...",
        "contentFormat": "TEXT"
      },
      "version": "01",
      "itemType": "CONTENT_ITEM"
    }
    
  4. (省略可)items.get を使用してインデックス登録を確認します。

リポジトリの変更を処理する

完全なインデックス登録を行うため、リポジトリ全体を定期的に再インデックス登録します。リストまたはグラフのトラバーサルには、Google Cloud インデックス登録キューを使用して変更を追跡し、変更されたものだけをインデックス登録します。items.push を使用して、キューにアイテムを追加します。