Exchange 2000徹底解剖
開発環境としてのExchange 2000 Server

プロパティの検索
●指定できるSQL文
 では,SEARCHメソッドで使用可能なSQL文の書式について説明する。

 Web Storage SystemがサポートしているSQL文は,標準的なSQLのサブセットである。検索専用であるため,コマンドはSELECT文しかなく,INSERT文やCREATE文,DELETE文,UPDATE文などはサポートされない。また,最大値をとるMAX関数,最小値をとるMIN関数,合計値をとるSUM関数などもサポートされない。それ以外にも,さまざまな制限がある。これらの制限は,Exchange 2000 Platform SDK(http://msdn.microsoft.com/exchange/)のドキュメントに記載されているので,参照してほしい。

 さて,SEARCHメソッドに指定可能なSELECT文の基本構造は,次のようになっている。

SELECT プロパティ名,プロパティ名,
  FROM 検索場所
  WHERE 条件式
○プロパティ名
 プロパティ名には,検索結果として取得したいプロパティ名を列挙する。プロパティ名は,ダブルクォーテーションで括って指定する。ここで指定したプロパティ名が,propエレメントに含まれた形式でサーバーから送り返されることになる(List 9の実行結果を参照)。

 なお,プロパティ名には,全プロパティを示す“*”を指定することもできる(“*”を指定する場合には,単に“*”を指定するのであり,ダブルクォーテーションでは括らない)。

○検索場所
 検索場所には,検索したいURLを指定する。URLはダブルクォーテーションで括って指定する。

 このとき,SCOPEという書式を使うと,サブディレクトリを含んで検索するかどうかを指定できる。

[サブディレクトリを含まない場合]
FROM SCOPE(
  'shallow traversal of "URL")
[サブディレクトリを含む場合]
FROM SCOPE(
  'deep traversal of "URL")

注意 Exchange 2000 Serverがインストールされたときに自動生成されるパブリックフォルダ(PUBLIC FOLDERS)に対し,サブディレクトリを含んだ検索を実行することはできない。そのような操作をしようとしたときには,応答コードとして“HTTP/1.1 501 Not Implemented”が返される。

 SCOPEを使わずにURLのみを指定した場合,サブディレクトリは含まれないものとして検索される。つまり“FROM "URL"”は,“FROM SCOPE('shallow traversal of "URL"”と等価である。

 また,FROM句には,複数のURLを指定することもできる。たとえば,“http://www.foobar.co.jp/public/”と“http://www.foobar.co.jp/public2/”の2つのURLを検索対象とし,サブディレクトリを含めずに検索したいときには,次のように指定する。

FROM SCOPE( 
  'shallow traversal of 
    "http://www.foobar.co.jp/
    public"', 
  'shallow traversal of 
    "http://www.foobar.co.jp/
    public2"')
○条件式
 WHERE句には条件式を指定する。WHERE句は省略することもできる。省略した場合には,FROM句で指定されたURL内に存在するすべてのファイルが結果として得られる。

 条件式は,基本的に“"プロパティ名" 演算子 ''”という書式で指定する。具体的には,“"プロパティ名"=''”や“"プロパティ名">''”,“"プロパティ名"<''”のように指定する。プロパティはダブルクォーテーションで括り,値はシングルクォーテーションで括るという点に注意したい。もちろんWHERE句では,AND演算子やOR演算子を使った複数条件の結合も指定できる。

 それ以外にも,型変換や文字列の比較,フリーテキストサーチをサポートするため,Table 5に示す句が用意されている。

 CONTAINS句やFREETEXT句は,次のような形式でプロパティ名を指定すると,比較対象となる値(FREETEXT句の場合にはそれに関連する値)にそのプロパティの値が含まれるかどうかを調べる働きを有する。なお,プロパティ名の代わりに“*”を指定することもできる(“*”の前後にダブルクォーテーションは指定しない)。その場合には,全プロパティが検索の対象となる。

CONTAINS("プロパティ名", 
     '検索する値')
FREETEXT("プロパティ名", 
     '検索する値')

注意 フリーテキストサーチが有効になっていない場合,CONTAINS句やFREETEXT句は利用できない。利用しようとすると,“422 Unprocessable Entity”という応答コードが返される。

 ここでプロパティを省略すると,ファイル本文をフルテキストサーチすることができる。たとえば,ファイル本文に“Exchange 2000”が含まれるかどうかを検索するには,CONTAINS句を使ってWHERE句を次のように指定すればよい。

WHERE FREETEXT('Exchange 2000')

Table 5 WHERE句でサポートされる句

解説
CAST型変換する。一般に,DAVネームスペース(Table 3)やMicrosoft社が提供するネームスペース(Table 4)のプロパティは,自動的に型変換される。したがって,この句は明示的に型変換したいときに指定する。Exchange 2000 Serverでは,urn:schemas-microsoft-com:datatypesネームスペースで定義される形式がサポートされる
CONTAINS文字列が含まれるかどうかを調べる
FROMSOF関連する語句が含まれているかどうかを調べる。たとえば,photographを検索語として指定すると,“photography”や“photographer”といった語句も合致の対象になる
FREETEXTフリーテキストサーチを使った条件式を指定する。書式はCONTAINS句と同じ
LIKEワイルドカード文字(%)を含んだ文字列の検索条件を指定する

○その他
 その他の指定としては,順序を指定するORDER BY句,特定のプロパティでグループ化するGROUP BY句が用意されている。また,Webならではという部分では,参照されている回数が多い順番に並び替えるというRANK BY句もある。詳細は,Exchange 2000 Platform SDK(http://msdn.microsoft.com/exchange/)を参照してほしい。

Prev 17/27 Next