Apache Nutch インデクサ プラグインのデプロイ

このガイドは、Google Cloud Search Apache Nutch インデクサ プラグインの管理者、つまり、インデクサ プラグインのダウンロード、デプロイ、構成、保守を担当するすべての方を対象としています。また、読者が Linux オペレーティング システムに精通し、ウェブクロールと Apache Nutch の基礎知識があることを前提としています。

このガイドでは、インデクサ プラグインのデプロイに関連する主要なタスクの実施手順について説明します。

  • インデクサ プラグイン ソフトウェアをダウンロードする
  • Google Cloud Search を構成する
  • Apache Nutch とウェブクロールを構成する
  • ウェブクロールとコンテンツのアップロードを開始する

G Suite 管理者が Google Cloud Search を Nutch インデクサ プラグインにマッピングするために行う必要があるタスクについては、このガイドでは説明しません。これらのタスクについては、サードパーティのデータソースを管理するをご覧ください。

Apache Nutch 用 Google Cloud Search インデクサ プラグインの概要

Google Cloud Search は、デフォルトで Google ドキュメントや Gmail などの G Suite データからコンテンツを検出し、インデックスに登録して提供できます。オープンソースのウェブクローラである Apache Nutch 用のインデクサ プラグインをデプロイすると、Google Cloud Search の対象を拡張してウェブ コンテンツをユーザーに提供することもできます。

構成プロパティ ファイル

インデクサ プラグインがウェブクロールを行って、インデックス API にコンテンツをアップロードできるようにするために、インデクサ プラグイン管理者は、このドキュメントのデプロイ手順に記載されている構成手順の中でコネクタに渡す具体的な情報を指定します。

インデクサ プラグインを使用するには、3 つの構成ファイルでプロパティを設定する必要があります。

  • nutch-site.xml - Apache Nutch ウェブクローラの設定が含まれています。
  • index-writers.xml - Google Cloud Search インデクサ プラグインの設定が含まれています。
  • sdk-configuration.properties - Google Cloud Search の設定が含まれています。

各ファイルのプロパティにより、Google Cloud Search インデクサ プラグインと Apache Nutch が相互に通信できます。

ウェブクロールとコンテンツのアップロード

構成ファイルを設定すると、ウェブクロールを開始するために必要な設定が完了します。Apache Nutch によってウェブがクロールされ、その構成に関連するドキュメント コンテンツが検出されます。インデクサ プラグインを使用して、元のバイナリ(またはテキスト)バージョンのドキュメント コンテンツが Google Cloud Search インデックス API にアップロードされ、インデックスに登録されて、最終的にユーザーに提供されます。

サポートされているオペレーティング システム

Apache Nutch 用 Google Cloud Search インデクサ プラグインは、Linux にインストールする必要があります。

サポートされている Apache Nutch バージョン

Apache Nutch 用 Google Cloud Search インデクサ プラグインでは、Nutch バージョン 1.15 がサポートされています。インデクサ プラグイン ソフトウェアには、このバージョンの Nutch が含まれています。

Apache Tika でサポートされているドキュメント タイプ

Apache Nutch バージョン 1.15 では、コンテンツの解析に Apache Tika バージョン 1.18 が使用されます。Apache Nutch インデクサ プラグインでインデックス登録が可能なドキュメント タイプのリストについては、Apache Tika Supported Document Formats をご覧ください。

ACL のサポート

インデクサ プラグインでは、アクセス制御リスト(ACL)を使用した G Suite ドメイン内のドキュメントへのアクセスの制御がサポートされています。

デフォルトの ACL が Google Cloud Search のプラグイン構成で有効になっている(defaultAcl.modenone 以外に設定され、defaultAcl.* が構成されている)場合、インデクサ プラグインはまず、デフォルトの ACL を作成して適用しようとします。

デフォルトの ACL が有効になっていない場合、プラグインはフォールバックして G Suite ドメイン全体に対する読み取り権限を付与します。

ACL 構成パラメータの詳細については、Google 提供のコネクタ パラメータをご覧ください。

要件

インデクサ プラグインをデプロイする前に、次の要件を満たしていることを確認してください。

  • インデクサ プラグインを実行するコンピュータに Java JRE 1.8 がインストールされている
  • Google Cloud Search と Apache Nutch の間の関係を確立するために必要な次の G Suite 情報を入手している

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

デプロイ手順

インデクサ プラグインをデプロイする際の基本的な手順は、次のとおりです。

  1. Apache Nutch とインデクサ プラグイン ソフトウェアをインストールする
  2. Google Cloud Search を構成する
  3. Apache Nutch を構成する
  4. ウェブクロールを構成する
  5. ウェブクロールとコンテンツのアップロードを開始する

ステップ 1: Apache Nutch とインデクサ プラグイン ソフトウェアをビルドしてインストールする

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

    $ git clone https://github.com/google-cloudsearch/apache-nutch-indexer-plugin.git
        $ cd apache-nutch-indexer-plugin
  2. 希望するバージョンのコネクタをチェックアウトします。

    $ git checkout tags/v1-0.0.5
  3. コネクタをビルドします。

    $ mvn package

    (コネクタのビルド時にテストをスキップするには、mvn package -DskipTests を使用します)。

  4. Apache Nutch 1.15 をダウンロードし、Apache Nutch の手順に従ってインストールします。

  5. target/google-cloudsearch-apache-nutch-indexer-plugin-v1.0.0.5.zip(手順 2 で作成)をフォルダに展開します。plugins/indexer-google-cloudsearch フォルダを Apache Nutch インストール プラグイン フォルダ(apache-nutch-1.15/plugins)にコピーします。

Apache Nutch インデクサ プラグインをデプロイするには、sdk-configuration.properties という Google Cloud Search 構成ファイルを作成する必要があります。このファイルには、コネクタで必要な構成情報を定義する Key-Value ペアが含まれている必要があります。

構成ファイルでは、Google Cloud Search データソースにアクセスするために必要な次のパラメータを指定する必要があります。

設定 パラメータ
データソース ID api.sourceId = 1234567890abcdef
必須。G Suite 管理者がセットアップした、Google Cloud Search ソースの ID。
サービス アカウント api.serviceAccountPrivateKeyFile = ./PrivateKey.json
必須。G Suite 管理者が作成した、インデクサ プラグインへのアクセスに必要な Google Cloud Search サービス アカウントの鍵ファイル。

次の例は、Google Cloud Search 構成ファイルを示しています。

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

構成ファイルには、他の Google Cloud Search 固有の構成パラメータを含めることもできます。これらのパラメータは、インデクサ プラグインが Google Cloud Search API にデータを push する方法に影響する可能性があります。その種のパラメータの例としては、defaultAcl.*batch.* があります。各パラメータの詳細な説明については、Google 提供のコネクタ パラメータをご覧ください。

インデクサ プラグインは、インデックスに登録するコンテンツのメタデータや構造化データが入力されるように構成できます。メタデータや構造化データの項目に入力される値は、インデックスに登録する HTML コンテンツのメタタグから抽出することも、構成ファイルでデフォルト値を指定することもできます。

設定 パラメータ
タイトル itemMetadata.title.field=movieTitle
itemMetadata.title.defaultValue=Gone with the Wind
デフォルトでは、プラグインはインデックスに登録するドキュメントのタイトルとして HTML title を使用します。タイトルがない場合は、ドキュメント タイトルに対応する値を含むメタデータ属性を参照することも、デフォルト値を設定することもできます。
作成タイムスタンプ 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=movie
サイトで使用されるオブジェクト タイプ(データソースのスキーマ オブジェクト定義で定義したもの)。このプロパティを指定しないと、コネクタは構造化データをインデックス登録しません。

: この構成プロパティは、メタデータ属性ではなく値そのものを指します。接尾辞 .field および .defaultValue はサポートされていません。

日時書式

日時書式は、期待される書式をメタデータ属性で指定するものです。構成ファイルにこのパラメータが含まれていない場合は、デフォルト値が使用されます。次の表に、このパラメータを示します。

設定 パラメータ
追加の日時パターン structuredData.dateTimePatterns=MM/dd/uuuu HH:mm:ssXXX

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

ステップ 3: Apache Nutch を構成する

Nutch 構成ファイルを変更する

conf/nutch-site.xml を開き、次のパラメータを追加します。

設定 パラメータ
プラグインに含まれるもの plugin.includes = text

必須。使用するプラグインのリスト。少なくとも次のものを含める必要があります。

  • index-basic
  • index-more
  • indexer-google-cloudsearch
conf/nutch-default.xml はこのプロパティのデフォルト値を提供しますが、手動で indexer-google-cloudsearch を追加することも必要となります。
メタタグ名 metatags.names = text

省略可。対応するデータソースのスキーマ内のプロパティにマッピングされるタグのカンマ区切りのリスト。 メタタグ用のクローラを設定する方法の詳細については、Nutch ドキュメントのこちらのページをご覧ください。

次の例は、nutch-site.xml に加える必要がある変更を示しています。

<property>
      <name>plugin.includes</name>
      <value>protocol-(http|httpclient)|urlfilter-regex|index-(basic|more| metadata)|query-(basic|site|url|lang)|indexer-google-cloudsearch|nutch-extensionpoints|parse-(text|html|msexcel|msword|mspowerpoint|pdf|metatags)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)|parse-(html|tika|metatags)|index-(basic|anchor|more|metadata)</value>
    </property>
    

インデックス ライターの構成ファイルを変更する

conf/index-writers.xml を開き、次のセクションを追加します。

<writer id="indexer_google_cloud_search_1" class="org.apache.nutch.indexwriter.gcs.GoogleCloudSearchIndexWriter">
          <parameters>
              <param name="gcs.config.file" value="path/to/config.properties"/>
          </parameters>
      </writer>
    

<writer> セクションには、次のパラメータが含まれています。

設定 パラメータ
Google Cloud Search 構成ファイルのパス gcs.config.file = path

必須。Google Cloud Search 構成ファイルのフル(絶対)パス。

アップロード形式 gcs.uploadFormat = text

省略可。インデクサ プラグインがドキュメント コンテンツを Google Cloud Search インデクサ API に push する形式。有効な値は次のとおりです。

  • raw: インデクサ プラグインは、変換されていない元のドキュメント コンテンツを push します。
  • text: インデクサ プラグインは、抽出されたテキスト コンテンツを push します。デフォルト値は raw です。

ステップ 4: ウェブクロールを構成する

ウェブクロールを開始する前に、組織で検索結果として使用できるようにしたい情報のみが含まれるようにクロールを構成する必要があります。このセクションでは、次の作業を行う方法についての基本情報を紹介します。

ウェブクロールの設定について詳しくは、Nutch のチュートリアルをご覧ください。

開始 URL を設定する

開始 URL では、Apache Nutch ウェブクローラがコンテンツのクロールを開始する場所を制御します。ウェブクローラが 1 つまたは複数の開始 URL からリンクをたどって、特定のクロールに含めるすべてのコンテンツに到達できるようにする必要があります。開始 URL は必須です。

開始 URL を設定するには:

  1. 作業ディレクトリを nutch インストール ディレクトリに変更します。
    $ cd ~/nutch/apache-nutch-X.Y/
  2. URL のディレクトリを作成します。
    $ mkdir urls
  3. seed.txt という名前のファイルを作成し、URL を書き込みます(1 行に 1 つずつ)。
    $ nano urls/seed.txt

「対象にする」ルールと「除外する」ルールを設定する

「対象にする URL」ルールでは、クロールと Google Cloud Search インデックスへの登録の対象とする URL を制御します。URL をクロールする前に、ウェブクローラは「対象にする URL」ルールと URL を照合します。これらのルールに適合した URL のみがクロールされて、インデックスに登録されます。

「除外する」ルールでは、クロールと Google Cloud Search インデックスへの登録対象から URL を除外します。クロールしないパターンが URL に含まれている場合、ウェブクローラはその URL をクロールしません。

「対象にする URL」ルールと「除外する URL」ルールを設定するには:

  1. 作業ディレクトリを nutch インストール ディレクトリに変更します。
    $ cd ~/nutch/apache-nutch-X.Y/
  2. conf/regex-urlfilter.txt を編集して、「対象にする」ルール / 「除外する」ルールを変更します。
    $ nano conf/regex-urlfilter.txt
  3. 次の例に示すように、対象にする / 除外する URL パターンや拡張子などの前に「+」または「-」を追加して正規表現(オープンエンドで問題ありません)を配置します。

例:

# skip file extensions
    -\.(gif|GIF|jpg|JPG|png|PNG|ico)

    # skip protocols (file: ftp: and mailto:)
        -^(file|ftp|mailto):

    # allow urls starting with https://support.google.com/gsa/
    +^https://support.google.com/gsa/

    # accept anything else
    # (commented out due to the single url-prefix allowed above)
    #+.
    

クロール スクリプトを編集する

gcs.uploadFormat パラメータが指定されていないか、「raw」に設定されている場合は、nutch index コマンドに渡す「-addBinaryContent -base64」引数を追加する必要があります。これらの引数は、インデクサ プラグインを呼び出すときにバイナリ コンテンツを Base64 で含めるよう Nutch Indexer モジュールに指示します。デフォルトでは、./bin/crawl スクリプトにこれらの引数は含まれていません。

apache-nutch-1.15/bincrawl.sh スクリプトを編集し、次の内容を追加します。

      if $INDEXFLAG; then
              echo "Indexing $SEGMENT to index"
              __bin_nutch index $JAVA_PROPERTIES "$CRAWL_PATH"/crawldb  -addBinaryContent -base64 -linkdb "$CRAWL_PATH"/linkdb "$CRAWL_PATH"/segments/$SEGMENT

              echo "Cleaning up index if possible"
              __bin_nutch clean $JAVA_PROPERTIES "$CRAWL_PATH"/crawldb
          else
              echo "Skipping indexing ..."
    

ステップ 5: ウェブクロールとコンテンツのアップロードを開始する

インデクサ プラグインをインストールして設定したら、ローカルモードで独自に実行できます。./bin のスクリプトを使用して、クロールジョブや個々の nutch コマンドを実行します。

次の例は、必要なコンポーネントが Linux システムのローカル ディレクトリにあることを前提としています。apache-nutch-1.15 フォルダから、次のコマンドで nutch を実行します。

bin/crawl -i -s urls/ crawl-test/ 5

クロールログは、標準出力(ターミナル)または logs/ ディレクトリで参照できます。ロギング出力を転送する場合や、より詳細なロギングを設定する場合は、conf/log4j.properties を編集します。