全文検索とは,登録した全テキストを対象に,キーワードとなる文字列(検索ターム)を一つまたは複数個指定して実行する検索です。例えば,「文書の中に『コンピュータ』が含まれる文書を探す」といった検索が実行できます。
また,全文検索には,検索条件に単語ではなく文章を指定できる検索もあります。これを概念検索といいます。概念検索では,検索条件に指定した文章(種文章)に近い概念を持つ(同じ単語が多く含まれる)文書が検索できます。
なお,全文検索を実行する場合は,HiRDB Text Search Plug-inが必要です。概念検索を実行する場合は,HiRDB Text Search Plug-inのほか,HiRDB Text Search Plug-in Conceptual Extensionが必要です。
全文検索の対象にする文書は,全文検索機能付き文書クラスを基に作成されている必要があります。全文検索機能付き文書クラスの作成方法については,「4.4.2 全文検索機能付き文書クラスの作成」を参照してください。
edmSQLでは,全文検索の次の機能を実現するための関数を提供しています。
ここでは,これらの検索の概要と,edmSQLで提供する関数について説明します。関数についての詳細は,「4.5.9 関数指定の構文規則」を参照してください。
また,全文検索では,HiRDB Text Search Plug-inの機能によって,検索タームや種文章をそのまま指定する検索だけでなく,同義語や異表記を同時に検索したり,検索タームに重みを指定したりすることもできます。
これらの,全文検索で指定できる機能の概要についても説明します。
ここでは,全文検索の種類について説明します。
プレーンテキストとは,構造を持たないテキスト形式の文書のことです。文書の全テキストに対して,一つまたは複数個の検索タームを指定した検索が実行できます。複数個の検索タームを指定する場合,それらの論理条件も指定できます。
例えば,「文書中に『コンピュータ』または『データベース』を含む文書」を検索したりできます。また,属性検索条件と組み合わせて,「文書のタイトル(プロパティ)が『データベース入門』であり,文書中に『コンピュータ』を含む文書」のような検索も実行できます。
また,検索タームとして指定した単語と完全一致または前方一致する単語を含む文書を検索したり,複数の単語をフレーズとして指定して,そのフレーズを含む文書を検索したりできます。
例えば,「文書中に『DocumentBroker』を含む文書」を検索したり,「文書中に『DocumentBroker Development Kit』というフレーズを含む文書」を検索したりできます。
この検索には,contains関数を使用します。
プレーンテキストに対して実行できる全文検索に加えて,XML文書のような構造を持った文書に対しては,その構造を条件に指定した全文検索ができます。このような検索を構造指定検索といいます。
構造指定検索では,XML文書のように論理構造を持っている文書に対して,その構造を指定した検索が実行できます。例えば,「文書・章・節」という構造で定義されたXML文書に対して,「構造『章』の中に『XML』という単語が含まれる文書」などが検索できます。
また,構造に付けられた属性の値を指定した検索もできます。例えば,「文書・タイトル・本文」という構造で定義され,構造「タイトル」が「分類」という属性を持っているXML文書に対して,「構造『タイトル』の属性『分類』が『政治経済』である文書」などが検索できます。
さらに,複数の検索条件を指定するときに,それらの検索条件が特定の構造内に含まれることを指定することもできます。例えば,「文書・著者」という構造に,「所属」という構造と「名前」という構造が含まれるXML文書に対して,「特定の『文書・著者』という構造の中の,構造『所属』に『設計部』が含まれ,構造『名前』に『山田』が含まれる文書」などが検索できます。
この検索には,contains関数を使用します。
全文検索を実行する時に,特定の検索タームを基に検索する以外に,「ある文章に似た内容の文書を検索したい」というような検索が実行できます。例えば,「リサイクルを含む環境問題」について書かれた文書を探したいときに,「ゴミのリサイクル」に関する文章を基に検索が実行できます。なお,以降このマニュアルでは,全文検索のうち概念検索だけに特有の説明については,概念検索と明記して,それ以外の全文検索と区別します。
概念検索は,edmSQLなどの検索条件に種文章を指定することで実行されます。ここでは,種文章に「…ゴミのリサイクルによって,資源が有効活用され,ゴミが減量化されます。…」という文字列を指定した場合の,概念検索の実行の流れを説明します。なお,種文章として指定できる容量は,5メガバイト以内です。
なお,概念検索に指定する概念検索条件は,?パラメタを使用して指定する必要があります。
この検索には,concept_with_score関数を使用します。
構造を持った文書に対して概念検索を実行する場合も,検索条件に構造が指定できます。例えば,「文書・章・節」という構造が定義されている文書に対して,「構造『章』の中に『…ゴミのリサイクルによって,資源が有効に活用され,…』という文章に似た概念を含んでいる文書を検索する」というような検索が実行できます。
この検索には,concept_with_score関数を使用します。
全文検索の検索結果には,スコアが付けられます。スコアの算出方法は,検索タームを指定する全文検索と,種文章を指定する概念検索で異なります。
全文検索の実行時に,検索結果として検索タームがハイライト表示されるSGML形式のファイルを出力します。例えば,「ネットワーク」という検索タームが含まれるテキスト形式の文書を検索する場合に,検索結果と同時に「<STRONG>」というハイライト表示用タグが埋め込まれたSGML形式のファイルを出力できます。
なお,検索結果として取得するハイライト表示用の文書は,検索対象である文書とは異なる文書として作成されます。
次に,検索対象文書とハイライト表示用文書の例を示します。
<!DOCTYPE body SYSTEM "DOC.dtd">
<body>
<p>
連絡事項
<note>
ネットワーク変更については,添付資料を参照してください。
</body>
<!DOCTYPE body SYSTEM "DOC.dtd">
<body>
<p>
連絡事項
<note>
<STRONG>ネットワーク</STRONG>変更については,添付資料を参照してください。
</body>
edmSQLでは,全文検索条件として,HiRDB Text Search Plug-inの規則に従った検索条件が指定できます。HiRDB Text Search Plug-inでは,単純文字列としての検索タームおよび種文章のほか,検索タームを展開したり,重みを設定したりする指定ができます。ここでは,これらの全文検索条件に指定できる機能の概要について説明します。
edmSQLでは,これらの指定は全文検索を実行する関数の引数として指定します。指定方法については,マニュアル「HiRDB Text Search Plug-in」を参照してください。
ここでは,概要を説明します。
異なる表記方法で表記された検索タームを含む文書も検索条件に指定できる検索です。
検索タームに指定したかたかなの異表記を含む文書を検索したり,全角アルファベットの大文字・小文字の異表記を含む文書を検索したり,アルファベットの全角・半角の異表記を含む文書を検索したりできます。例えば,検索ターム「バイオリン」を検索するときに,「ヴァイオリン」のように表記されている文書も検索できます。また,検索ターム「Ski」を検索するときに,「ski」や「Ski」のように表記されている文書も検索できます。
異表記展開検索では,データベースで決められた規則に従って,検索タームの異表記を含む文書を検索します。
検索タームと同じ意味を持つ単語(同義語)を含む文書も検索条件に指定できる検索です。
例えば,検索ターム「Ski」を検索するときに,「スキー」を含む文書も一緒に検索できます。同義語展開検索では,あらかじめ作成してある同義語辞書を基に,検索タームの同義語を含む文書を検索します。
複数の検索タームを指定した場合に,検索タームが出現する距離(文字数)を検索条件に指定できる検索です。
例えば,「『最新』と『技術』という検索タームを含み,これらの二つの単語が10文字以内に存在する文書」などが検索できます。この場合には,「最新印刷技術」や「最新の技術」などの文字列を含む文書が検索されます。
検索タームに重み(重要度)を付ける検索です。重みを付けた検索とは,「『インターネット』および『データベース』が含まれる文書が検索したい。ただし,『インターネット』をより多く含む文書から取り出したいので,『インターネット』に『5』,『データベース』に『2』の重みを付けて検索する」のように指定する検索です。重みは構造にも付けられます。重みを付けた場合,スコアは重みによって算出されます。
概念検索では,重みは構造だけに指定できます。
概念検索を実行する時に取得するスコア値を,正規化して取得する指定です。正規化した値は,種文章を検索した場合を100とした,相対的な値として算出されます。
構造を指定する場合に,その属性値も指定する検索です。
例えば,構造「文章」の属性「Author」に「Tanaka」を含む文書などが検索できます。
なお,概念検索では,属性値指定はできません。
複数の構造を対象にした検索を実行する場合に,その検索条件を満たす構造が,ある特定の構造に含まれていることを指定する検索です。構造「文章」の下位構造として「作成者」と「所属」がある場合に,特定の構造「文章」の構造「作成者」に「Tanaka」が含まれ,かつ構造「所属」に「営業部」が含まれる文書などが検索できます。
なお,概念検索では,特定構造検索指定はできません。