CSV コネクタをデプロイする

このガイドは、コネクタのダウンロード、構成、実行、モニタリングを担当する Google Cloud Search CSV(Comma-Separated Values: カンマ区切り値)コネクタの管理者を対象としています。

このガイドでは、次の主要なタスクの手順について説明します。

  • Cloud Search CSV コネクタ ソフトウェアをダウンロードします。
  • 特定の CSV データソース用にコネクタを構成します。
  • コネクタをデプロイして実行します。

このドキュメントで説明しているコンセプトを理解するには、Google Workspace、CSV ファイル、アクセス制御リスト(ACL)に関する基本的な知識が必要です。

Cloud Search CSV コネクタの概要

Cloud Search の CSV コネクタは、任意の CSV(カンマ区切り値)テキスト ファイルを受け取って処理を行います。CSV ファイルは表形式のデータを格納し、各行が 1 つのデータレコードを表します。

コネクタは、CSV ファイルから行を抽出し、Indexing API を使用して Cloud Search にインデックス登録します。インデックス登録が完了すると、Cloud Search クライアントまたは Query API を介して行を検索できるようになります。コネクタは、コンテンツに対するユーザー アクセスを制御する ACL もサポートしています。

コネクタは Linux または Windows にインストールできます。デプロイする前に、次のコンポーネントがそろっていることを確認してください。

通常、これらの認証情報はドメインの Google Workspace 管理者から提供されます。

デプロイ手順を実行する

Cloud Search CSV コネクタをデプロイする手順は次のとおりです。

  1. コネクタ ソフトウェアをインストールする
  2. コネクタの構成を指定する
  3. Cloud Search データソースへのアクセスを構成する
  4. CSV ファイル アクセスを構成する
  5. インデックス登録する列の名前、一意キーの列、日時の列を指定する
  6. クリック可能な検索結果の URL に使用する列を指定する
  7. メタデータと列の形式を指定する
  8. データ走査をスケジュールする
  9. ACL オプションを指定する

1. SDK をインストールする

ローカルの Maven リポジトリに SDK をインストールします。

  1. GitHub から SDK リポジトリのクローンを作成します。

    $ git clone https://github.com/google-cloudsearch/connector-sdk.git
    $ cd connector-sdk/csv

  2. 選択したバージョンをチェックアウトします。

    $ git checkout tags/v1-0.0.3

  3. コネクタをビルドします。

    $ mvn package

  4. コネクタを抽出してインストールします。

    $ cp target/google-cloudsearch-csv-connector-v1-0.0.3.zip installation-dir
    $ cd installation-dir
    $ unzip google-cloudsearch-csv-connector-v1-0.0.3.zip
    $ cd google-cloudsearch-csv-connector-v1-0.0.3

2. CSV コネクタの構成を指定する

コネクタの動作は、構成ファイル内のパラメータで制御します。構成可能なパラメータは次のとおりです。

  • データソースへのアクセス。
  • CSV ファイルの場所と定義。
  • 一意 ID 列。
  • 走査と ACL のオプション。

構成ファイルを作成するには:

  1. テキスト エディタを開き、ファイルに connector-config.properties という名前を付けます。
  2. 構成パラメータを key=value ペアとして追加します。各ペアは新しい行に記述します。構成ファイルの例については、構成ファイルの例をご覧ください。

追跡を簡素化するため、構成ファイルをコネクタと同じディレクトリに配置します。コマンドラインでファイルのパスを指定すれば、コネクタは指定のファイルを確実に認識します。指定しなかった場合、コネクタはローカル ディレクトリ内の connector-config.properties をデフォルトで使用します。コネクタを実行するをご覧ください。

3. Cloud Search データソースへのアクセスを構成する

構成ファイルでは、Cloud Search データソースにアクセスするためのパラメータを指定する必要があります。データソース ID、サービス アカウント ID、サービス アカウントの秘密鍵ファイルへのパスが必要です。

設定 パラメータ
データソース ID api.sourceId=1234567890abcdef

必須。Google Workspace 管理者がセットアップした、Cloud Search ソースの ID。

サービス アカウントの秘密鍵へのパス api.serviceAccountPrivateKeyFile=./PrivateKey.json

必須。コネクタへのアクセスに必要なサービス アカウント キー ファイル。

ID ソースの ID api.identitySourceId=x0987654321

外部のユーザーとグループを使用する場合は必須。Google Workspace 管理者が設定した ID ソースの ID。

4. CSV ファイルのパラメータを構成する

ファイルのパス、形式、エンコードを特定します。

設定 パラメータ
CSV ファイルへのパス csv.filePath=./movie_content.csv

必須。インデックス登録するファイルへのパス。

ファイル形式 csv.format=DEFAULT

ファイルの形式。使用できる値は、Apache Commons CSV CSVFormat クラスのものです。

形式の値には、DEFAULTEXCELINFORMIX_UNLOADINFORMIX_UNLOAD_CSVMYSQLRFC4180ORACLEPOSTGRESQL_CSVPOSTGRESQL_TEXTTDF があります。指定しない場合、Cloud Search は DEFAULT を使用します。

ファイル形式の修飾子 csv.format.withMethod=value

Cloud Search がファイルを処理する方法に対する変更。使用できるメソッドは、Apache Commons CSV CSVFormat クラスのものであり、単一の文字、文字列、ブール値を取るものです。

たとえば、区切り文字としてセミコロンを指定するには、csv.format.withDelimiter=; を使用します。空の行を無視するには、csv.format.withIgnoreEmptyLines=true を使用します。

ファイルのエンコード タイプ csv.fileEncoding=UTF-8

使用する Java 文字セット。デフォルトはプラットフォームの文字セットです。

5. インデックス登録する列の名前と一意キーの列を指定する

構成ファイルに列情報を指定します。

設定 パラメータ
インデックス登録する列 csv.csvColumns=movieId,movieTitle,description,actors,releaseDate,year,userratings...

CSV ファイルからインデックス登録する列の名前。デフォルトでは、CSV の最初の行がヘッダーとして使用されます。csv.csvColumns が指定されている場合は、それが優先されます。csv.csvColumns が設定されていて、最初の行にヘッダーが含まれている場合に、最初の行がデータとしてインデックス登録されないようにするには、csv.skipHeaderRecord=true も設定します。

一意キーの列 csv.uniqueKeyColumns=movieId

一意の ID の生成に使用される列。デフォルトはレコードのハッシュコードです。

6. クリック可能な検索結果の URL に使用する列を指定する

検索結果のクリック可能な URL を有効にします。

設定 パラメータ
検索結果の URL 書式 url.format=https://mymoviesite.com/movies/{0}

必須。表示 URL の作成に使用される形式。

URL パラメータ url.columns=movieId

必須。レコードの表示 URL の生成に用いられる値を含む CSV ファイルの列の名前。

検索結果から除外する URL パラメータ url.columnsToEscape=movieId

省略可。表示 URL の生成から除外する URL の値を含む CSV ファイルの列の名前。

7. メタデータ、列書式、検索品質を指定する

構成ファイルにパラメータを追加して以下の情報を指定できます。

メタデータ構成パラメータ

これらのパラメータは、アイテム メタデータを設定するための列を記述します。

設定 パラメータ
タイトル itemMetadata.title.field=movieTitle
itemMetadata.title.defaultValue=Gone with the Wind

ドキュメント タイトルのメタデータ属性。デフォルトは空の文字列です。

URL itemMetadata.sourceRepositoryUrl.field=url
itemMetadata.sourceRepositoryUrl.defaultValue=https://www.imdb.com/title/tt0031381/
検索結果のドキュメント URL のメタデータ属性。
作成タイムスタンプ itemMetadata.createTime.field=releaseDate
itemMetadata.createTime.defaultValue=1940-01-17

ドキュメント作成タイムスタンプのメタデータ属性。

最終更新時刻 itemMetadata.updateTime.field=releaseDate
itemMetadata.updateTime.defaultValue=1940-01-17

ドキュメントの最終変更タイムスタンプのメタデータ属性。

ドキュメント言語 itemMetadata.contentLanguage.field=languageCode
itemMetadata.contentLanguage.defaultValue=en-US

インデックス登録するドキュメントのコンテンツ言語。

スキーマ オブジェクト タイプ itemMetadata.objectType.field=type
itemMetadata.objectType.defaultValue=movie

コネクタで使用されるオブジェクト タイプ(スキーマで定義したもの)。このプロパティを指定しないと、コネクタは構造化データをインデックス登録しません。

日時書式

このパラメータは、文字列値を日付フィールドまたは日時フィールドに解析するための追加の日時形式を指定します。

設定 パラメータ
追加の日時書式 structuredData.dateTimePatterns=MM/dd/uuuu HH:mm:ssXXX
追加の java.time.format.DateTimeFormatter パターンのセミコロン区切りリスト。これらのパターンは、メタデータまたはスキーマ内の日付や日時の項目の文字列値を解析するときに使用されます。デフォルト値は空のリストですが、RFC 3339 と RFC 1123 の書式は常にサポートされています。

列書式

これらのパラメータは、CSV ファイルの列を解析する方法を指定します。

設定 パラメータ
ヘッダーをスキップ csv.skipHeaderRecord=true

最初の行は無視してください。デフォルトは false です。

多値列 csv.multiValueColumns=genre,actors

複数の値を持つ列名。

多値列の区切り文字 csv.multiValue.genre=;

多値列の区切り文字。デフォルトの区切り文字はカンマです。

検索品質

コネクタは、コンテンツ テンプレートを使用してレコードの書式を設定します。タイトル フィールドの優先度が最も高くなります。他のフィールドに優先度(高、中、低)を割り当てることができます。

設定 パラメータ
コンテンツのタイトル contentTemplate.csv.title=movieTitle

コンテンツ タイトルは、検索品質が「最高」に区分されたフィールドです。

コンテンツの項目の検索品質を「高」に区分します。 contentTemplate.csv.quality.high=actors

コンテンツのフィールドの検索品質を「高」に区分します。デフォルトは空の文字列です。

検索品質: 低 contentTemplate.csv.quality.low=genre

コンテンツのフィールドの検索品質を「低」に区分します。デフォルトは空の文字列です。

検索品質: 中 contentTemplate.csv.quality.medium=description

コンテンツのフィールドの検索品質を「中」に区分します。デフォルトは空の文字列です。

品質区分: 未指定 contentTemplate.csv.unmappedColumnsMode=IGNORE

検索品質が未指定のフィールドをどう扱うかを指定します。指定できる値は次のとおりです。

  • APPEND - 未指定のコンテンツ フィールドをテンプレートに追加する
  • IGNORE - 未指定のコンテンツ フィールドを無視する

デフォルト値は APPEND です。

8. データ走査をスケジュールする

走査はコンテンツを発見するプロセスです。コネクタは CSV 行を走査し、Indexing API を使用してインデックス登録します。CSV コネクタはフル走査のみを実行します。

設定 パラメータ
走査間隔 schedule.traversalIntervalSecs=7200

完全走査の間隔(秒単位)。デフォルトは 86400(1 日)です。

起動時の走査 schedule.performTraversalOnStart=false

最初のフル走査は、待機しないでコネクタの起動時に実行します。デフォルトは true. です。

9. ACL オプションを指定する

コネクタは ACL を使用してアクセスを制御します。リポジトリで ACL が提供されている場合は、アップロードします。それ以外の場合は、デフォルトの ACL を構成します。defaultAcl.modenone 以外の値に設定します。

設定 パラメータ
ACL モード defaultAcl.mode=fallback

必須。コネクタはフォールバック モードのみをサポートしています。

デフォルトの ACL 名 defaultAcl.name=VIRTUAL_CONTAINER_FOR_CONNECTOR_1

省略可。デフォルトの ACL に使用されるコネクタの仮想コンテナ名をオーバーライドします。デフォルト値は DEFAULT_ACL_VIRTUAL_CONTAINER です。複数のコネクタが同じデータソース内のコンテンツをインデックス登録している場合は、この値をオーバーライドすることを検討してください。

デフォルトのパブリック ACL defaultAcl.public=true

リポジトリ全体をパブリック ドメイン アクセスに設定します。デフォルトは false です。

共通の ACL グループ リーダー defaultAcl.readers.groups=google:group1, group2
共通の ACL リーダー defaultAcl.readers.users=user1, user2, google:user3
共通の ACL 拒否グループ リーダー defaultAcl.denied.groups=group3
共通の ACL 拒否リーダー defaultAcl.denied.users=user4, user5
ドメイン全体のアクセス インデックス登録されたあらゆるレコードを一般公開してドメインの全ユーザーがアクセスできるようにするには、以下の両方のオプションを設定します。
  • defaultAcl.mode=fallback
  • defaultAcl.public=true
共通定義 ACL 各レコードに共通の ACL を定義するには、次のパラメータを設定します。
  • defaultAcl.mode=fallback
  • defaultAcl.public=false
  • defaultAcl.readers.groups=google:group1, group2
  • defaultAcl.readers.users=user1, user2, google:user3
  • defaultAcl.denied.groups=group3
  • defaultAcl.denied.users=user4, user5

ユーザーとグループは、「google:」が先頭に付いていない限り、ローカル ドメインで定義されたものとみなされます。

デフォルトのユーザーまたはグループは空文字列です。defaultAcl.publicfalse の場合に限り、ユーザーとグループのオプションを指定します。複数のグループとユーザーを指定する場合は、カンマ区切りリストを使用します。

defaultAcl.modenone の場合、ACL を個別に設定すると、レコードが検索可能になります。

スキーマ定義

構造化データクエリをサポートするには、データソースのスキーマを設定します。

たとえば、映画に関する次の情報を含む CSV ファイルがあるとします。

  1. movieId
  2. movieTitle(映画タイトル)
  3. description(説明)
  4. year(年)
  5. releaseDate(リリース日)
  6. actors(俳優) - カンマ区切りリストで複数を指定
  7. genre(ジャンル) - 多値
  8. 評価

この構造に基づいて、データソースに次のスキーマを定義できます。

{
  "objectDefinitions": [
    {
      "name": "movie",
      "propertyDefinitions": [
        {
          "name": "actors",
          "isReturnable": true,
          "isRepeatable": true,
          "isFacetable": true,
          "textPropertyOptions": {
            "operatorOptions": {
              "operatorName": "actor"
            }
          }
        },
        {
          "name": "releaseDate",
          "isReturnable": true,
          "isRepeatable": false,
          "isFacetable": false,
          "datePropertyOptions": {
            "operatorOptions": {
              "operatorName": "released",
              "lessThanOperatorName": "releasedbefore",
              "greaterThanOperatorName": "releasedafter"
            }
          }
        },
        {
          "name": "movieTitle",
          "isReturnable": true,
          "isRepeatable": false,
          "isFacetable": false,
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": "HIGHEST"
            },
            "operatorOptions": {
              "operatorName": "title"
            }
          }
        },
        {
          "name": "genre",
          "isReturnable": true,
          "isRepeatable": true,
          "isFacetable": true,
          "enumPropertyOptions": {
            "operatorOptions": {
              "operatorName": "genre"
            },
            "possibleValues": [
              {
                "stringValue": "Action"
              },
              {
                "stringValue": "Documentary"
              },
              {
                "stringValue": "Drama"
              },
              {
                "stringValue": "Crime"
              },
              {
                "stringValue": "Sci-fi"
              }
            ]
          }
        },
        {
          "name": "userRating",
          "isReturnable": true,
          "isRepeatable": false,
          "isFacetable": true,
          "integerPropertyOptions": {
            "orderedRanking": "ASCENDING",
            "maximumValue": "10",
            "operatorOptions": {
              "operatorName": "score",
              "lessThanOperatorName": "scorebelow",
              "greaterThanOperatorName": "scoreabove"
            }
          }
        }
      ]
    }
  ]
}

構成ファイルの例

次の構成ファイルの例は、コネクタの動作の例を定義するパラメータの key=value ペアを示しています。

# data source access
api.sourceId=1234567890abcd
api.serviceAccountPrivateKeyFile=./PrivateKey.json

# CSV data structure
csv.filePath=./movie_content.csv
csv.csvColumns=movieId,movieTitle,description,releaseYear,genre,actors,ratings,releaseDate
csv.skipHeaderRecord=true
url.format=https://mymoviesite.com/movies/{0}
url.columns=movieId
csv.datetimeFormat.releaseDate=yyyy-mm-dd
csv.multiValueColumns=genre,actors
csv.multiValue.genre=;
contentTemplate.csv.title=movieTitle

# metadata structured data and content
itemMetadata.title.field=movieTitle
itemMetadata.createTime.field=releaseDate
itemMetadata.contentLanguage.defaultValue=en-US
itemMetadata.objectType.defaultValue=movie
contentTemplate.csv.quality.medium=description
contentTemplate.csv.unmappedColumnsMode=IGNORE

#ACLs
defaultAcl.mode=fallback
defaultAcl.public=true

コネクタを実行する

コマンドラインからコネクタを実行するには:

$ java -jar google-cloudsearch-csv-connector-v1-0.0.3.jar -Dconfig=my.config

デフォルトでは、コネクタのログは標準出力に書き出されます。logging.properties を指定して、出力先をファイルにすることができます。