検索エンジンを作る

第11回 文書プロパティの検索

この記事を読むのに必要な時間:およそ 2 分

デフォルト検索プロパティ

プロパティ検索機能は,検索対象のプロパティを特定できるので便利なのですが,あまり条件式との相性が良くありません。先のBlogエントリの検索を例に考えてみましょう。タイトルと本文のいずれかに「スイーツ」「シフォンケーキ」を含むエントリをプロパティ検索式を使って表現してみます。単純に考えると,次のような検索式になりそうです。

([ title "スイーツ" ] AND [ title "シフォンケーキ" ]) OR ([ body "スイーツ" ] AND [ body "シフォンケーキ" ])

ところが,この検索式ではtitleに"スイーツ"を含み,bodyに"シフォンケーキ"を含む文書は検索結果に含まれません。完全な検索式は次のようになります。

([ title "スイーツ" ] AND [ title "シフォンケーキ" ]) OR ([ body "スイーツ" ] AND
 [ body "シフォンケーキ" ]) OR ([ title "スイーツ" ] AND [ body "シフォンケーキ" ]) OR
 ([ body "スイーツ" ] AND [ title "シフォンケーキ" ])

単純な目的の検索なのに検索式がずいぶんと複雑になってしまいました。この欠点を補うために導入したのが,全文検索を行う際にあらかじめどのプロパティを対象に検索を行うかを指定できる,デフォルト検索プロパティと呼ぶ機能です。

デフォルトプロパティ指定は,オプションとして指定します。指定しない場合には,基本検索式の中のプロパティ指定式以外で指定される文字列は,全ての全文検索プロパティから検索されます。デフォルトプロパティ指定は次のような指定を検索式に前置します。

PROPS プロパティ名

複数のプロパティをデフォルトの全文検索対象として指定するには,プロパティ名をカンマ(,)で区切って列挙します。

PROPS プロパティ名1, プロパティ名2, プロパティ名3

プロパティには全文検索対象のフィールドのみが指定可能です。指定できるプロパティ名の数の上限はありません。

先のタイトルと本文のいずれかに「スイーツ」「シフォンケーキ」を含むエントリを探す式は次のようになります。

PROPS title, body "スイーツ" AND "シフォンケーキ"

前述の例と比べて,検索式が劇的に単純化され使いやすくなりました。実際には,使いやすくなっただけではなく,検索性能もPROPSを用いる方が4倍ほど高速に検索が行なえます。プロパティ検索式と,デフォルト検索プロパティを併用することもできるので,複雑な条件をシンプルに記述できます。

デフォルト検索プロパティは,さらに次回解説予定のADJという近傍検索機能とも併用できます。例えば,次のような検索式です。

PROPS title, body "福田" ADJ<10> "首相"

この検索式は,titleとbodyのプロパティのいずれかに,"福田"の後ろ10文字以内に"首相"を含む文書を検索します(この場合「福田首相」⁠福田 首相」⁠福田康夫首相」⁠福田 康夫首相」⁠福田 康夫 首相」などが検索できます⁠⁠。こちらの例は,プロパティ検索式では検索式を表現できません。

著者プロフィール

工藤智行(くどうともゆき)

有限会社サイパック取締役社長。システム構築・管理のコンサルティング,ローカライゼーション,文書処理や障害者向けソフトウェアを中心とするプログラミングを長年手がける。 近著『UNIXプログラミングの道具箱』『システム管理現場の鉄則FreeBSD編』等

URLhttp://www.cypac.co.jp/

著書