このアダプタは、Apache Tikaライブラリを使用して様々な形式でHDFSに格納されているファイルを解析するための関数を提供します。この項の内容は次のとおりです。
問合せで組込み関数を使用するには、次のようにTikaファイル・モジュールをインポートする必要があります。
import module "oxh:tika";
Tikaファイル・モジュールには、次の関数が含まれています。
例は、「Tikaファイル・アダプタの関数の例」を参照してください。
様々な形式でHDFSに格納されているファイルを解析し、それらのファイルからコンテンツまたはメタデータを抽出します。
シグネチャ
declare %tika:collection function tika:collection($uris as xs:string*) as document-node()* external; declare %tika:collection function function tika:collection($uris as xs:string*, $contentType as xs:string?) as document-node()* external;
パラメータ
$uris
: HDFSファイルのURI。
$contentType
: 解析するコンテンツのメディア・タイプを指定するもので、charset属性を含めることができます。パラメータを指定する場合、タイプとエンコーディングの両方を定義します。指定しない場合、Tikaはファイル拡張子から値の自動検出を試行します。パラメータを指定することをお薦めします。
戻り値
各値に対して1つのドキュメント・ノードが返されます。「Tikaパーサーの出力形式」を参照してください。
引数として提供されたデータを解析します。たとえば、XMLまたはJSONドキュメント内のhtmlフラグメントを解析できます。
シグネチャ
declare function tika:parse($data as xs:string?, $contentType as xs:string?) as document-node()* external;
パラメータ
$data
: 解析する値。
$contentType
: 解析するコンテンツのメディア・タイプを指定するもので、charset属性を含めることができます。パラメータを指定する場合、タイプとエンコーディングの両方を定義します。指定しない場合、Tikaはファイル拡張子から値の自動検出を試行します。パラメータを指定することをお薦めします。
戻り値
各値に対して1つのドキュメント・ノードが返されます。「Tikaパーサーの出力形式」を参照してください。
次の注釈を使用すると、Tikaを使用してHDFS内のファイルを解析する関数を定義できます。これらの注釈によって、組込み関数では使用できない追加機能を使用できます。
シグネチャ
HDFSファイルを読み取るカスタム関数には、次のいずれかのシグネチャが必要です。
declare %tika:collection [additional annotations] function local:myFunctionName($uris as xs:string*, $contentType as xs:string?) as document-node()* external; declare %tika:collection [additional annotations] function local:myFunctionName($uris as xs:string*) as document-node()* external;
注釈
Tikaファイル・アダプタにより実装される外部関数を識別します。必須。
オプションのmethodパラメータは次のいずれかの値です。
tika
: tikaファイル内の各行がdocument-node()
として返されます。デフォルト。
ファイル・コンテンツ・タイプを宣言します。これはMIMEタイプであり、XQuery仕様に従ってcharset属性を持つことができません。オプション。
ファイル文字セットを宣言します。オプション。
注意: %output:media-type 注釈と%output:econding 注釈は、シグネチャ内に$contentTypeが明示的に指定されていないときのコンテンツ・タイプまたはエンコーディングを指定します。 |
Tika解析の結果は、1つのドキュメント・ノードと2つのルート要素です。
ルート要素#1は、Tikaにより生成されたXHTMLコンテンツです。
ルート要素#2は、Tikaにより抽出されたドキュメント・メタデータです。
ルート要素の形式は次のようになります。
ルート要素#1
<html xmlns="http://www.w3.org/1999/xhtml"> ...textual content of Tika HTML... </html>
ルート要素#2
<tika:metadata xmlns:tika="oxh:tika"> <tika:property name="Name_1">VALUE_1</tika:property> <tika:property name="NAME_2">VALUE_2</tika:property> </tika:metadata>
次のHadoopプロパティは、Tikaアダプタの動作を制御します。
型: ブール
デフォルト値: false。
説明: これをTRUEに設定すると、解析中にすべてのHTML要素が省略されます。これをFALSEに設定すると、解析中に安全な要素が省略されます。
型: 文字列のカンマ区切りのリスト
デフォルト値: 定義されていません。
説明: Microsoft Officeドキュメント・パーサーなどの一部のTikaパーサーにより使用されるロケールを定義します。使用できる文字列は、language、countryおよびvariantの3つのみです。文字列countryおよびvariantはオプションです。ロケールを定義しない場合、システム・ロケールが使用されます。文字列を定義する場合、その文字列はhttp://docs.oracle.com/javase/7/docs/api/java/util/Locale.html
に記載されているjava.util.Locale
仕様形式に対応している必要があり、ロケールは次のように構成できます。
languageのみを指定した場合、ロケールは言語から構成されます。
languageおよびcountryを指定した場合、ロケールは言語と国の両方から構成されます。
language、countryおよびvariantを指定した場合、ロケールは言語、国およびバリアントから構成されます。
この問合せ例では、Tikaを使用してPDFファイルをHTMLフォームに解析し、HTMLドキュメントをSolrのフルテキスト索引に追加します。
*bigdata*.pdf
次の問合せでは、HDFSファイルを索引付けします。
import module "oxh:tika"; import module "oxh:solr"; for $doc in tika:collection("*bigdata*.pdf") let $docid := data($doc//*:meta[@name eq "resourceName"]/@content)[1] let $body := $doc//*:body[1] return solr:put( <doc> <field name="id">{ $docid }</field> <field name="text">{ string($body) }</field> <field name="content">{ serialize($doc/*:html) }</field> </doc> )
ドキュメントのHTML表現がSolr索引に追加され、検索可能になります。索引内の各ドキュメントIDはファイル名です。
この問合せ例では、順序ファイルおよびTikaを使用して解析を行います(キーがURLで値がhtmlです)。
import module "oxh:tika"; import module "oxh:solr"; import module "oxh:seq"; for $doc in seq:collection-tika(”/path/to/seq/files/*") let $docid := document-uri($doc) let $body := $doc//*:body[1] return solr:put( <doc> <field name="id">{ $docid }</field> <field name="text">{ string($body) }</field> <field name="content">{ serialize($doc/*:html) }</field> </doc> )
ドキュメントのHTML表現がSolr索引に追加され、検索可能になります。索引内の各ドキュメントIDはファイル名です。