ASP.NET 文件全文檢索 解決方案 使用Windows Search

  • 4156
  • 0

摘要: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);
            }