摘要:ASP.NET 文件全文檢索 解決方案 使用Windows Search
由於專案需求客戶需要於系統中將上傳至server的附件檔案(如word excel pdf)以內文關鍵字為索引條件,並提供下載,於是乎我只好求助谷歌,有index service相關使用分享不少,但windows server 2012與windows 8 似乎已改用Windows Search 做本機的搜尋,因此利用此機會來分享出來造訪國外blog相關文章後自己摸索出來的使用方式。 以下 就貼 code囉!!!
STEP1 以下為使用 OleDb設置相關where條件 並copy to Datatable 後續可用Datagrid Bind
string connectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
OleDbConnection connection = new OleDbConnection(connectionString);
//System.FileExtension ==>檔案類型 ; System.ItemUrl==>檔案路徑 ; System.ItemName==>檔案名稱
string query = string.Format(@"SELECT System.ItemName,System.ItemPathDisplay,System.Search.AutoSummary,System.Size,System.DateCreated,System.ItemType FROM SystemIndex " +
@"WHERE scope ='file:"這邊放檔案目錄實體路徑" + "' and (filename LIKE '%{0}%'or FREETEXT('{0}')) and CONTAINS(System.ItemType,'\".doc\" or \".pdf\" or \".xlsx\" or \".xls\" or \".docx\" or \".jpg\" or \"jpeg\" ')", TxtSearch.Text.ToString());
OleDbCommand command = new OleDbCommand(query, connection);
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
DataTable Dt = new DataTable();
Dt.Columns.Add("ItemName", typeof(string));
Dt.Columns.Add("ItemUrl", typeof(string));
Dt.Columns.Add("AutoSummary", typeof(string));
Dt.Columns.Add("Size", typeof(string));
Dt.Columns.Add("DateCreated", typeof(string));
Dt.Columns.Add("ItemType", typeof(string));
while (reader.Read())
{
DataRow dr = Dt.NewRow();
dr["ItemName"] = reader.GetString(0);
dr["ItemUrl"] = reader.GetString(1);
dr["AutoSummary"] = reader.GetValue(2);
dr["Size"] = int.Parse(reader.GetValue(3).ToString()) / 1024 + "KB";
dr["DateCreated"] = DateTime.Parse(reader.GetValue(4).ToString()).ToShortDateString();
dr["ItemType"] = reader.GetValue(5);
Dt.Rows.Add(dr);
}