フリーワード検索では、提案書に含まれるすべてのテキストデータから指定されたキーワードを検索し、ヒットした文書の一覧(お客様名、提案タイトルなど)を取得します。このため、XPathよりも複雑な検索式が利用でき、かつ検索結果のフォーマットを指定できるXQueryを用いることにします。
XQueryの構文はFLWRと呼ばれますが、「For:XMLデータの繰返し処理」「Let:変数に代入」「Where:条件を指定」「Return:結果出力の指定」の頭文字をとったものです。
それでは、XQuery式を以下の3つのステップに分けて組み立てていきます。具体的にキーワードとして「システム」を指定して検索し、ヒットした文書のお客様名と提案タイトルを取得するXQuery式を検討します。
|
検索処理の要求 |
左記を実現するXQuery式 |
ステップ1 |
検索の対象とする要素のロケーションパスを指定し、$dataというループ変数で参照 |
$data in /document-content /body/presentation |
ステップ2 |
ステップ1で指定した$dataの配下のすべてのテキストについて、'システム'というキーワードを含んでいるものという検索条件を記述 |
contains($data//text(),'システム') |
ステップ3 |
検索結果に出力するお客様名と提案タイトルのテキストをそれぞれ$client、$titleで参照 |
$client := $data//frame[@name='お客様名'] //text() $title := $data//frame[@name='提案タイトル'] //text() |
表6:XQuery式の組み立て
こうして、以下に示すXQuery式が得られます。
「システム」を含むような提案書を検索するためのXQuery式
for $data in /ND/document-content/body/presentation
let $client := $data//frame[@name='お客様名']//text()
,$title := $data//frame[@name='提案タイトル']//text()
where contains($data//text(),'システム')
return
<result>
<client>{string($client)}</client>
<title>{string($title)}</title>
</result>
実際に検索してみた結果を以下に示します。
フリーワード検索による検索結果
<Query-Results>
<result>
<customer>伊藤証券株式会社</customer>
<title>Think DX Serverを利用した基幹システムの導入効果</title>
</result>
<result>
<customer>佐藤運輸株式会社</customer>
<title>Think SCM Serverを利用したSCMシミュレーション構築</title>
</result>
<result>
<customer>鈴木電気株式会社</customer>
<title>Think That Serverタイプ2導入によるシステム再構築</title>
</result>
</Query-Results>
これで、Impress文書をXMLデータベースに登録する手順や、項目検索・フリーワード検索の実現方式が明確になりました。次回は検討した結果を使って、営業支援システムを構築していきます。
|