部署 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,作为索引器插件管理员,您可以在本文档的部署步骤部分所述的配置步骤中为连接器提供特定信息。

要使用索引器插件,您必须在三个配置文件中设置属性:

  • nutch-site.xml - 包含 Apache Nutch 网页抓取程序的设置
  • index-writers.xml - 包含 Google Cloud Search 索引器插件的设置
  • sdk-configuration.properties - 包含 Google Cloud Search 的设置。

每个文件中的属性让 Google Cloud Search 索引器插件和 Apache Nutch 能够相互通信。

网页抓取和内容上传

设置好上述配置文件后,您就可以启动网页抓取了。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 支持的文档格式

ACL 支持

该索引器插件支持使用访问控制列表 (ACL) 来控制对 G Suite 网域中文档的访问权限。

如果在 Google Cloud Search 插件配置中启用了默认 ACL(defaultAcl.mode 设置为 none 以外的值,并配置为 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. 将第 2 步中构建的 target/google-cloudsearch-apache-nutch-indexer-plugin-v1.0.0.5.zip 解压缩到一个文件夹。将 plugins/indexer-google-cloudsearch 文件夹复制到 Apache Nutch 安装插件的文件夹 (apache-nutch-1.15/plugins)。

要部署 Apache Nutch 索引器插件,您需要创建名为 sdk-configuration.properties 的 Google Cloud Search 配置文件。此文件必须包含定义连接器所需配置信息的键/值对。

配置文件必须指定以下参数,这些参数是访问 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 的方式。这些参数的示例包括 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 时采用的格式。有效值为:

  • raw:该索引器插件推送未经转换的原始文档内容。
  • text:该索引器插件推送提取出来的文本内容。 默认值为 raw

第 4 步:配置网页抓取

在启动网页抓取之前,您必须进行抓取配置,使其仅包含您的组织希望在搜索结果中出现的信息。本部分包含完成以下操作的基本信息:

如需详细了解如何设置网页抓取,请参阅 Nutch 教程

设置起始网址

起始网址控制 Apache Nutch 网页抓取工具开始抓取内容的位置。通过追随一个或多个起始网址中的链接,网页抓取工具应该能够覆盖您希望包含在特定抓取中的所有内容。起始网址属于必填参数。

要设置起始网址,请执行以下操作:

  1. 将工作目录更改为 Nutch 的安装目录:
    $ cd ~/nutch/apache-nutch-X.Y/
  2. 为这些网址创建一个目录:
    $ mkdir urls
  3. 创建一个名为 seed.txt 的文件并将这些网址写入其中(每行 1 个):
    $ nano urls/seed.txt

设置追随规则和不追随规则

追随网址规则决定了要抓取并编入 Google Cloud Search 索引中的网址。在抓取任何网址之前,网页抓取工具均会根据追随网址规则对其进行检查。只有与这些规则匹配的网址才会被抓取并编入索引。

不追随网址规则将特定网址排除在抓取并编入 Google Cloud Search 索引之外。如果某个网址包含不抓取的格式,则网页抓取工具不会对其进行抓取。

要设置追随规则和不追随规则,请执行以下操作:

  1. 将工作目录更改为 Nutch 的安装目录:
    $ cd ~/nutch/apache-nutch-X.Y/
  2. 修改 conf/regex-urlfilter.txt 以更改追随/不追随规则:
    $ nano conf/regex-urlfilter.txt
  3. 将含有“+”或“-”前缀的正则表达式(开放式表达式也可以)添加到追随/不追随网址格式、扩展名等中,如以下示例所示。

示例:

# 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”,则必须添加“-addBinaryContent -base64”参数以传递给 nutch index 命令。这些参数会让 Nutch 索引器模块在调用索引器插件时包含 Base64 格式的二进制内容。默认情况下,./bin/crawl 脚本没有这些参数。

修改 apache-nutch-1.15/bin 中的 crawl.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

抓取日志将显示在 std 输出(终端)或 logs/ 目录中。要指定日志记录输出方式或获取更详细的日志记录,请修改 conf/log4j.properties