4.2.2 全文検索

ここでは,全文検索について説明します。

<この項の構成>
(1) 全文検索とは
(2) 全文検索の種類
(3) 全文検索で指定できる機能

(1) 全文検索とは

全文検索とは,登録したコンテンツを対象に,キーワードとなる文字列(検索ターム)を一つまたは複数個指定して実行する検索です。例えば,「文書のコンテンツ中に『コンピュータ』という文字列が含まれる文書を探す」などの検索が実行できます。

なお,全文検索には,次の2種類の検索が含まれます。

このマニュアルでは,これらの二つの検索を合わせて,「全文検索」といいます。それぞれの検索に特有の説明をする場合は,「検索タームを指定する全文検索」または「概念検索」と区別して説明します。

全文検索の対象にする文書は,全文検索機能付き文書クラスを基に作成されている必要があります。全文検索機能付き文書クラスの作成方法については,「4.5.2 全文検索機能付き文書クラスの作成」を参照してください。

なお,edmSQLでは,全文検索の次の機能を実現するための関数を提供しています。

ここでは,これらの検索の概要と,使用するedmSQLの関数について説明します。関数についての詳細は,「5.9 関数指定の構文規則」を参照してください。

また,全文検索では,HiRDB Text Search Plug-inの機能によって,検索タームや種文章をそのまま指定する検索だけでなく,同義語や異表記を同時に検索したり,検索タームに重みを指定したりすることもできます。これらの全文検索で指定できる機能の概要についても説明します。

なお,AIXの場合は,XML文書が管理できません。このため,構造指定検索はできません。

(2) 全文検索の種類

ここでは,全文検索の種類について説明します。

(a) プレーンテキストに対する全文検索(検索タームを指定する全文検索)

プレーンテキストとは,構造を持たないテキスト形式の文書のことです。文書のコンテンツに対して,一つまたは複数個の検索タームを指定した検索が実行できます。複数個の検索タームを指定する場合,それらの論理条件も指定できます。

例えば,「文書のコンテンツに『コンピュータ』または『データベース』という文字列を含む文書」を検索したりできます。また,属性検索条件と組み合わせて,「文書のタイトル(プロパティ)が『データベース入門』であり,文書のコンテンツに『コンピュータ』という文字列を含む文書」のような検索も実行できます。

この検索には,contains関数を使用します。

(b) 構造を持った文書に対する全文検索

プレーンテキストに対して実行できる全文検索に加えて,XML文書のような構造を持った文書に対しては,その構造を条件に指定した全文検索ができます。このような検索を構造指定検索といいます。

なお,AIXの場合,構造指定検索は実行できません。

構造指定検索では,XML文書のように論理構造を持っている文書に対して,その構造を指定した検索が実行できます。例えば,「文書・章・節」という構造で定義されたXML文書に対して,「構造『章』の中に『XML』という単語が含まれる文書」などが検索できます。

また,構造に付けられた属性の値を指定した検索もできます。例えば,「文書・タイトル・本文」という構造で定義され,構造「タイトル」が「分類」という属性を持っているXML文書に対して,「構造『タイトル』の属性『分類』が『政治経済』である文書」などが検索できます。

さらに,複数の検索条件を指定する場合に,それらの検索条件が特定の構造内に含まれることを指定することもできます。例えば,「文書・著者」という構造に,「所属」という構造と「名前」という構造が含まれるXML文書に対して,「特定の『文書・著者』という構造の中の,構造『所属』に『設計部』が含まれ,構造『名前』に『山田』が含まれる文書」などが検索できます。

この検索には,contains関数を使用します。

(c) プレーンテキストに対する概念検索

全文検索実行時に,特定の検索タームを基に検索する以外に,「ある文章に似た内容の文書を検索したい」というような検索が実行できます。例えば,「リサイクルを含む環境問題」について書かれた文書を探したい場合に,「ゴミのリサイクル」に関する文章を基に検索が実行できます。

概念検索は,edmSQLなどの検索条件に種文章を指定することで実行できます。種文章として指定できる容量は,5メガバイト以内です。

ここでは,種文章に「…ゴミのリサイクルによって,資源が有効活用され,ゴミが減量化されます。…」という文字列を指定した場合の,概念検索の実行の流れを説明します。

  1. HiRDB Text Search Plug-in Conceptual Extensionの機能によって,種文章から特徴タームが抽出されます。
    特徴タームとは,種文章に指定した文章から,漢字,かたかなおよびアルファベットを抽出した単語です。
    この例の場合は,「ゴミ」,「リサイクル」,「資源」,「有効活用」,「減量化」というような単語が抽出されます。
  2. HiRDB Text Serach Plug-in Conceptual Extensionによって,1.の特徴タームに優先順位が与えられた検索用特徴タームが選出されます。
    検索用特徴タームの選出基準については,HiRDB Text Search Plug-inの環境定義ファイルに指定します。詳細は,マニュアル「HiRDB Text Search Plug-in」を参照してください。概念検索では,この検索用特徴タームを基に,検索が実行されます。
  3. 検索用特徴タームを検索タームとして,全文検索が実行されます。さらに,種文章との適合度順(検索用特徴タームを多く含む文章順)に,スコア値が設定されて,検索結果が出力されます。

なお,概念検索条件に指定する種文章は,?パラメタで指定する必要があります。

この検索には,concept_with_score関数を使用します。

(d) 構造を持った文書に対する概念検索

構造を持った文書に対して概念検索を実行する場合も,検索条件に構造が指定できます。例えば,「文書・章・節」という構造が定義されている文書に対して,「構造『章』の中に『…ゴミのリサイクルによって,資源が有効に活用され,…』という文章に似た概念を含んでいる文書を検索する」というような検索が実行できます。

この検索には,concept_with_score関数を使用します。

(e) 検索結果をスコア順にソートして取得できる全文検索

全文検索の検索結果には,スコアが付けられます。スコアの算出方法は,検索タームを指定する全文検索と,種文章を指定する概念検索で異なります。

検索タームを指定する全文検索の場合
スコアは,「検索結果として取得する文書の中に含まれる検索タームの数×検索タームに指定した重み×構造に指定した重み」の値として算出されます。ただし,検索条件に複数の検索タームの論理条件を指定したり,近傍検索条件を指定したりする場合,スコアの算出方法は異なります。
スコアの算出方法の詳細については,マニュアル「HiRDB Text Search Plug-in」を参照してください。
この検索には,contains_with_score関数を使用します。スコア値はscore関数を使用して取得します。
種文章を指定する概念検索の場合
スコアは,種文章との適合度によって算出されます。適合度とは,種文章から抽出した検索用特徴タームが,検索結果に含まれる割合のことです。
また,種文章を検索した場合のスコアを100として,スコアを正規化して算出することもできます。
スコアの算出方法の詳細については,マニュアル「HiRDB Text Search Plug-in」を参照してください。
この検索には,concept_with_score関数を使用します。スコア値はscore_concept関数を使用して取得します。
(f) 検索結果にハイライトタグの埋め込みをしてSGML形式で出力する検索

全文検索実行時に,検索結果として検索タームがハイライト表示されるSGML形式のファイルを出力します。例えば,「ネットワーク」という検索タームが含まれるテキスト形式の文書を検索する場合に,検索結果と同時に「<STRONG>」というハイライト表示用タグが埋め込まれたSGML形式のファイルを出力できます。なお,検索結果として取得するハイライト表示用の文書は,検索対象である文書とは異なる文書として作成されます。

次に,検索対象文書とハイライト表示用の文書の例を示します。

検索対象文書

<!DOCTYPE body SYSTEM "DOC.dtd">
<body>
<p>
連絡事項
<note>
ネットワークの変更については,添付資料を参照してください。
</body>

検索結果として取得するハイライト表示用の文書

<!DOCTYPE body SYSTEM "DOC.dtd">
<body>
<p>
連絡事項
<note>
<STRONG>ネットワーク</STRONG>の変更については,添付資料を参照してください。
</body>

(3) 全文検索で指定できる機能

edmSQLでは,全文検索条件として,HiRDB Text Search Plug-inの規則に従った検索条件が指定できます。

HiRDB Text Search Plug-inでは,単純文字列としての検索タームおよび種文章のほか,検索タームを展開したり,重みを設定したりする指定ができます。

edmSQLでは,これらの指定は全文検索を実行する関数の引数として指定します。これらの関数は,HiRDB Text Search Plug-inで提供されている関数と対応しています。指定方法については,マニュアル「HiRDB Text Search Plug-in」を参照してください。

ここでは,全文検索条件に指定できる機能の概要について説明します。

(a) 検索タームの異表記を検索対象にした検索(異表記展開指定)

異なる表記方法で表記された検索タームを含む文書も検索条件に指定できる検索です。

異表記展開を指定した場合は,検索タームに指定したかたかなの異表記を含む文書を検索したり,全角アルファベットの大文字・小文字の異表記を含む文書を検索したり,アルファベットの全角・半角の異表記を含む文書を検索したりできます。例えば,検索ターム「バイオリン」を検索する場合に,「ヴァイオリン」のように表記されている文書も検索できます。また,検索ターム「Ski」を検索する場合に,「ski」や「Ski」のように表記されている文書も検索できます。

異表記展開検索では,データベースで決められた規則に従って,検索タームの異表記を含む文書を検索します。

(b) 検索タームの同義語を検索対象にした検索(同義語展開指定)

検索タームと同じ意味を持つ単語(同義語)を含む文書も検索条件に指定できる検索です。

例えば,検索ターム「Ski」を検索する場合に,「スキー」を含む文書も一緒に検索できます。同義語展開検索では,あらかじめ作成してある同義語辞書を基に,検索タームの同義語を含む文書を検索します。

(c) 複数の検索ターム間の距離条件や出現順序を指定した検索(近傍条件指定)

複数の検索タームを指定した場合に,検索タームが出現する距離(文字数)を検索条件に指定できる検索です。

例えば,「『最新』と『技術』という検索タームを含み,これらの二つの単語が10文字以内に存在する文書」などが検索できます。この場合には,「最新印刷技術」や「最新の技術」などの文字列を含む文書が検索されます。

(d) 検索タームおよび構造に重みを付ける検索(重み指定

検索タームに重み(重要度)を付ける検索です。重みを付けた検索とは,「『インターネット』および『データベース』が含まれる文書が検索したい。ただし,『インターネット』をより多く含む文書から取り出したいので,『インターネット』に『5』,『データベース』に『2』の重みを付けて検索する」のように指定する検索です。重みは構造にも付けられます。重みを付けた場合,スコアは重みによって算出されます。

概念検索では,重みは構造だけに指定できます。

(e) 種文章のスコアを100として,検索結果に相対的なスコアを付ける検索(概念検索のスコアオプション指定)

概念検索で取得するスコア値を,正規化して取得する指定ができる検索です。正規化した値は,種文章を検索した場合を100とした,相対的な値として算出されます。

(f) 構造の属性値を指定した検索(属性値指定

構造を指定する場合に,その属性値も指定する検索です。

例えば,構造「文章」の属性「Author」に「Tanaka」を含む文書などが検索できます。

なお,概念検索では,属性値指定はできません。

(g) 複数の構造を対象にした検索条件を満たす構造が,ある特定の構造に含まれていることを指定する検索(特定構造検索指定)

複数の構造を対象にした検索を実行する場合に,その検索条件を満たす構造が,ある特定の構造に含まれていることを指定する検索です。構造「文章」の下位構造として「作成者」と「所属」がある場合に,特定の構造「文章」の構造「作成者」に「Tanaka」が含まれ,かつ構造「所属」に「営業部」が含まれる文書などが検索できます。

なお,概念検索では,特定構造検索指定はできません。