Windows 2012 R2 サーバー上のファイル共有に Web インターフェイスを表示するプログラムを作成しました。Web アプリケーション内で、そのサーバーで実行されている Windows Search インデックスにクエリを実行する機能を追加して、ユーザーが結果を取得できるようにしました。以下は、インデックスで検索するために使用されるクエリです。
SELECT System.FileName, System.ItemPathDisplay, System.ItemType, System.Size, System.ItemDate, System.DateModified
FROM myserver.systemindex
WHERE SCOPE='file://myserver/myshare' AND System.FileName LIKE '%<somevalue>%'
ファイル名の数字を除いて、ほとんどのシナリオでうまく機能します。全体として、すべてのグループのみが番号をグループ化しているように見えます。たとえば、「G-5687-R2.txt」という名前のファイルがある場合、「G」、「G-5687」、「5687」、または「2」を検索すると、ドキュメントが返されます。ただし、「G-56」または「56」を検索しても何も返されません。Windows エクスプローラー内で「56」検索を実行すると、ドキュメントが返されるため、クエリに何かが欠けていると思います。
以下の完全なコード:
string searchLocation = "file://myserver/myshare";
string searchString = "56";
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Search.CollatorDSO.1;Extended Properties='Application=Windows';";
OleDbCommand cmd = conn.CreateCommand();
cmd.CommandText = string.Format("SELECT System.FileName, System.ItemPathDisplay, System.ItemType, System.Size, System.ItemDate, System.DateModified FROM " +
" myserver.systemindex WHERE SCOPE='{1}' AND" +
" System.FileName LIKE " + " '%{0}%'"
, searchString, searchLocation);
conn.Open();
OleDbDataReader rdr = cmd.ExecuteReader();