前回は文書フィルタというしくみについて解説しました。今回は,文書フィルタによって抽出されたプロパティ情報をどのように検索するかについて説明します。
プロパティ検索式
FINDSPOTでは,通常の全文検索は次のような検索式で実現できました。
"織田信長"
また,AND条件,OR条件,NOT条件を表現する場合には,次のように論理式を用いることができました。
"織田信長" AND "豊臣秀吉"
プロパティ検索を行う場合には,全文検索の文字列を指定していた箇所で,代わりに次のような記述を行います。
[ プロパティ名 演算子 "文字列" ]
プロパティ検索の演算子の種類は次のようなものをサポートしています。
| [プロパティ名 "文字列"] | 特定のプロパティに文字列を含む文書を検索 |
| [プロパティ名 ^ "文字列"] | 特定のプロパティが指定文字列で始まる文書を検索 |
| [プロパティ名 $ "文字列"] | 特定のプロパティが指定文字列で終る文書を検索 |
| [プロパティ名 = "文字列"] | 特定のプロパティが指定文字列の値である文書を検索 |
| [プロパティ名 < "文字列"] | 特定のプロパティが指定文字列より小さな値の文書を検索 |
| [プロパティ名 > "文字列"] | 特定のプロパティが指定文字列より大きな値の文書を検索 |
| [プロパティ名 <= "文字列"] | 特定のプロパティが指定文字列以下の値の文書を検索 |
| [プロパティ名 >= "文字列"] | 特定のプロパティが指定文字列以上の値の文書を検索 |
| [プロパティ名 >= "文字列1" <= "文字列2"] | 特定のプロパティが文字列1以上かつ文字列2以下の文書を検索 |
| [プロパティ名 > "文字列1" < "文字列2"] | 特定のプロパティが文字列より大きく文字列2より小さな文書を検索 |
<, >, <=, >=の演算子を使ったプロパティ指定はSQLデータベースに記録した数値や日付時刻フィールドに対してのみ使用できます。演算子なし,及び^, $の演算子を使ったプロパティ指定は全文検索フィールドに対してのみ使用できます。=の演算子は,全文検索フィールド及び,SQLデータベースに記録したフィールドのどちらに対しても使用できます。
プロパティ検索式の例として,Blogのエントリを対象に全文検索を行うことを考えてみましょう。プロパティとしては,title(タイトル),body(本文),comment(コメント),day(日付)と3つを定義し,title, body, commentは全文検索フィールド,dayはSQLの書誌データベースに記録するものとします。
[ title "スイーツ" ]
この検索式は,タイトルに「スイーツ」という文字列を含むBlogのエントリを検索することになります。また,
[ title "スイーツ" ] AND [ body "ロールケーキ" ]
という検索式は,タイトルに「スイーツ」という文字列を含み,本文に「ロールケーキ」という文字列を含むBlogエントリを検索します。
[ title "スイーツ" ] AND [ body "ロールケーキ" ] AND [ day <= "2008/01/01" ]
という検索式は,タイトルに「スイーツ」という文字列を含み,本文に「ロールケーキ」という文字列を含み,かつ日付が2008年1月1日以降のBlogエントリを検索することになります。
プロパティ検索式と通常の全文検索を条件式で組み合わせて使うことも可能です。
[ title "スイーツ" ] AND "チーズケーキ"
この例では,タイトルに「スイーツ」という文字列を含み,本文,タイトル,コメントのどこかに「チーズケーキ」という文字列を含むBlogエントリを検索することになります。
通常の全文検索とプロパティ検索との違いは,通常の全文検索は全文検索対象インデックスを作成しているすべてのプロパティを対象に検索を行うのに対して,プロパティ検索は,特定のプロパティに限定して全文検索を行うことができる点です。また,プロパティ検索では,SQLの書誌データベースに保存した非全文検索対象の書誌情報の数値,日時,文字列などのフィールドを対象に検索を行うこともできます。

