Windows Search 4.0をC#から利用する
バージョンが上がるたびにコロコロ名称が変わっているような気がするWindows Searchですが、最新版のWindows Search 4.0のAPIを、C#から利用することについて調べ中です。
途中経過として、各情報へのリンク集(2008年7月時点)と、ちょっとしたサンプルを。
各OS向けWindows Search 4.0ダウンロード先
Windows XP 向け Windows Search 4.0 (KB940157)
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=55c18cb3-c916-4298-aba3-5b98904f7cda
Windows Server 2003 向け Windows Search 4.0 (KB940157)
http://www.microsoft.com/downloads/details.aspx?familyid=070B6969-6205-4A03-82BE-8AF7320A663D&displaylang=ja
Windows Vista 向け Windows Search 4.0 (KB940157)
http://www.microsoft.com/downloads/details.aspx?familyid=BC28ED7F-C51B-49CD-B505-95B91B453284&displaylang=ja
Windows Searchに関するリファレンス(日本語訳は今のところ無いようです)
MSDN Library -> Win32 and COM Development -> Windows Search -> Windows Search -> Overview
Windows Search
http://msdn.microsoft.com/en-us/library/aa965362(VS.85).aspx
とりあえず動かしたいので、Windows XP Professional SP2にWindows Search 4.0をインストールして、以下のコードを実行すると、それっぽい結果が得られるところまでは動きました。
using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Search.CollatorDSO;Extended Properties='Application=Windows';")) { string data = "ListView"; List<string> resultitems = new List<string>(); try { conn.Open(); System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(); cmd.Connection = conn; cmd.CommandText = string.Format( "SELECT System.ItemNameDisplay " + "FROM systemindex WHERE Contains('\"*{0}*\"') OR " + "CONTAINS(\"System.ItemNameDisplay\",\"*{0}*\"')" + "ORDER BY System.DateAccessed DESC ",n data); System.Data.OleDb.OleDbDataReader results = cmd.ExecuteReader(); while (results.Read()) { resultitems.Add(results.GetString(0)); } results.Close(); } finally { conn.Close(); } }
この時点で、C#でもVB.NETでも、あるいはADO経由でVBScriptとかPowerShellで、Windows Searchのインデックス情報にアクセスできるってことなので、SharePointのヘボ全文検索よりマシなものが色々作れそうです。
ただしWindows SearchのGUIでサポートされているAdvanced Query Syntax (AQS。AND、OR、NOTとか)が使えないため、せっかくのWindows Searchの利点が完全には活かせていないような気もする。
続く。。。Part2