オープンソース Web 検索エンジン Apache Nutch の概要 - Mi manca qualche giovedi`? のつづき。
Apache Nutch はさまざまな機能をプラグインで追加できる。プラグインは extension-points と呼ばれるインターフェースを実装することで提供される。
ドキュメントは以下のものがあるが、いろいろ足りてない……。
extension-points の一覧
extension-points は org.apache.nutch.plugin.Pluggable を implements した interface。ただしプラグイン可能でないものはその限りではない(extension-points 経由で提供されている標準機能がいくつかある)。
したがって、http://nutch.apache.org/apidocs-1.2/org/apache/nutch/plugin/Pluggable.html を見れば標準で用意されているプラグインの一覧が得られる。
v1.2 現在では以下の extension-points がある。順番は indexer が PluginRepository に登録する順番
- Summarizer
- Nutch Summarizer. ドキュメントがなくて不明。検索結果のサマライザ??
- Protocol
- Nutch Protocol. URLからコンテンツを取得する際、プロトコルごとに取得方法を変える(http, ftp など)
- SegmentMergeFilter
- Nutch Segment Merge Filter.
- NutchAnalyzer
- Nutch Analysis. ドキュメントからの単語抽出
- FieldFilter
- Nutch Field Filter. フィールドをドキュメントに追加(IndexingFilter を抽象化したもの? 違いはまだよくわかっていない)
- HtmlParseFilter
- HTML Parse Filter. HTML のパース結果にメタデータを追加する
- QueryFilter
- Nutch Query Filter. クエリーを変換して、メタデータを追加する
- ResponseWriter
- Nutch Search Results. 検索結果を様々な出力フォーマットにて書き出す
- URLNormalizer
- Nutch URL Normalizer.
- URLFilter
- Nutch URL Filter. 取得を試みる URL をフィルタリングする(injector と crawldb updater にて使用)
- OnlineClusterer
- Nutch Online Search Results Clustering Plugin. オンライン検索結果をクラスタリングするアルゴリズム(Google の検索結果にて同じドメインの結果がまとめられているのを実現するためのもの?)
- IndexingFilter
- Nutch Indexing Filter. インデックスのフィールドにメタデータを追加する
- Parser
- Nutch Content Parser. コンテンツからデータ(テキスト)を取り出す
- ScoringFilter
- Nutch Scoring. CrawlDatum クラス(コンテンツの取得からスコアリングまでをハンドリングするクラス?)にてスコアリング変数を操作するフィルタ。"multi-stage scoring adjustments" を用意することで、フィルタ適用の順序を指定できる
- Ontology
- Ontology Model Loader. 不明。JavaDoc も空。ソース読むしか。
プラグインの組み込み
プラグインは、プラグインフォルダの $NUTCH_HOME/plugins/ に置かれる。構成は次の通り。
$NUTCH_HOME/plugins/ [プラグイン名]/ plugin.xml プラグイン情報 [適当なファイル名].jar プラグイン本体
プラグインを有効にするには conf/nutch-site.xml の plugin.includes property にプラグイン名を追加すればいい。
標準で有効なプラグインは conf/nutch-default.xml に書いてある。
<property> <name>plugin.includes</name> <value>protocol-http|urlfilter-regex|parse-(text|html|js|tika)|index-(basic|anchor)|query-(basic|site|url)|response-(json|xml)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value> </property>
plugin.xml について
プラグイン情報ファイルの plugin.xml には、プラグイン本体の jar ファイル名、extension-points と実装されたクラス名の対応、それらに与えるパラメータなどの情報が記述される。
プラグインには複数の extension-points の実装が含まれうる。これらを extensions と呼ぶ?
プラグイン本体の jar ファイル名
plugin/runtime に記述。
<runtime> <library name="language-identifier.jar"> <export name="*"/> </library> </runtime>
extension 情報(extension-point と個々の実装クラス)
plugin/extension に記述。
<extension id="org.apache.nutch.analysis.lang.LanguageQueryFilter" name="Nutch Language Query Filter" point="org.apache.nutch.searcher.QueryFilter"> <implementation id="LanguageQueryFilter" class="org.apache.nutch.analysis.lang.LanguageQueryFilter"> <parameter name="raw-fields" value="lang"/> </implementation> </extension>
- extension@id
- extension の id。後述の実装クラス名と一致させる?(運用? 必須?)
- extension@point
- プラグインする extension-point を表す interface 名
- extension/implementation@id
- extension の実装の id(extension の id との違いは……?)
- extension/implementation@class
- extension の実装クラス名
- extension/implementation/palameter
- extension に引き渡すパラメータ
標準の言語判定プラグイン
Nutch 標準の言語判定プラグインは $NUTCH_HOME/plugins/language-identifier である。
したがって、conf/nutch-site.xml の plugin.includes に language-identifier を追加して(標準ので有効なプラグインを残すなら、その設定を nutch-default.xml からコピーする必要がある?)クロールを行えば、インデックスに追加された lang フィールドに判定された言語名が格納され、また言語しぼり込み機能が有効になる。
language-identifier には3つの extension-points の実装が含まれている。
- HTMLLanguageParser
- メタデータ(meta タグ、HTTP ヘッダなど)に含まれる言語情報を取得し、ドキュメントのメタデータフィールドに格納する
- LanguageIdentifier
- メタデータにて指定された言語名をインデックス(に登録されるフィールドを持つ Document オブジェクト)の lang フィールドに言語名を設定する。メタデータにて言語が指定されていない場合、統計情報を元に言語判定を行い、その結果を用いる。
- LanguageQueryFilter
- 検索条件に lang を追加する extension
このことから、言語判定に Language Detection Library for Java を用いるには、LanguageIdentifier extension の実装を差し替えればよいことがわかる。
次は Nutch のプラグインの実装について。