Here I am going to discuss about the Windows Indexing services. It's maintain search catalog information in the form of meta data. With the meta data we can access the search meta data information.
see the code fragment below:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OleDb;
using System.Xml;
using System.Xml.Xsl;
using System.Text;
using System.IO;
public partial class Web_AdvQuery : System.Web.UI.Page
{
DataView results = null;
string TheQuery = "";
public static string ddlFolderName = "";
protected void Page_Load(object sender, EventArgs e)
{
btnExecute.Attributes.Add("onClick", "testEnterKey();");
if (!IsPostBack)
{
bindData();
fillFolderNameData();
}
}
protected void btnExecute_Click(object sender, EventArgs e)
{
bindData();
}
protected void btnClear_Click(object sender, EventArgs e)
{
SearchString.Text = "";
FileNameRestriction.Text = "";
DocAuthorRestriction.Text = "";
FSRestOther.Text = "";
FMModDate.Text = "";
resultsDataGrid.Visible = false;
}
protected void resultsDataGrid_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
resultsDataGrid.CurrentPageIndex = e.NewPageIndex;
bindData();
}
public void bindData()
{
string fileTypes = "\".doc\" OR \".rtf\" OR \".txt\" OR \".pdf\"";
string freeTextQuery = BindDataFreeText();
string queryAppend = BinddataThroughQuery();
string DS = null;
if (IsPostBack)
{
string query = "SELECT DocTitle,Filename,size,path,rank,write,url from SCOPE() WHERE " + freeTextQuery + " CONTAINS(Filename, '" + fileTypes + "') ";
query += queryAppend.ToString() + " ORDER BY rank DESC, write DESC";
if (ddlFolderName.Equals("") == false)
DS = ddlFolderName.ToString();
else
DS = "KMSLOCAL";
OleDbConnection cn = new OleDbConnection("Provider= \"MSIDXS\"; Data Source=\"" + DS.ToString() + "\";");
OleDbDataAdapter cmd = new OleDbDataAdapter(query, cn);
DataSet data = new DataSet();
DataTable record = new DataTable();
DataTable dt = new DataTable();
DataRow dr;
cmd.Fill(record);
dt.Columns.Add(new DataColumn("#", typeof(string)));
dt.Columns.Add(new DataColumn("DocTitle", typeof(string)));
dt.Columns.Add(new DataColumn("Filename", typeof(string)));
dt.Columns.Add(new DataColumn("size", typeof(string)));
dt.Columns.Add(new DataColumn("path", typeof(string)));
dt.Columns.Add(new DataColumn("rank", typeof(string)));
dt.Columns.Add(new DataColumn("write", typeof(string)));
dt.Columns.Add(new DataColumn("url", typeof(string)));
int totalRecord = record.Rows.Count;
for (int i = 0; i < totalRecord; i++)
{
dr = dt.NewRow();
int j = i + 1;
dr[0] = j;
dr[1] = record.Rows[i]["DocTitle"];
dr[2] = record.Rows[i]["Filename"];
dr[3] = record.Rows[i]["size"];
dr[4] = record.Rows[i]["path"];
dr[5] = record.Rows[i]["rank"];
dr[6] = record.Rows[i]["write"];
dr[7] = record.Rows[i]["url"];
dt.Rows.Add(dr);
}
data.Tables.Add(dt);
results = new DataView(data.Tables[0]);
resultsDataGrid.DataSource = results;
resultsDataGrid.DataBind();
}
}
public string BindDataFreeText()
{
if (SearchString.Text.Equals("") == false)
{
string freeText = SearchString.Text.Trim().ToString();
freeText = freeText.Replace("'", "''");
return "FREETEXT('" + freeText + "') AND";
}
return null;
}
public void fillFolderNameData()
{
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("KMSLocal.xml"));
SortedList lstFolderName = new SortedList();
XmlNodeList elements = doc.SelectNodes("//myRoot/folder");
foreach (XmlElement element in elements)
{
string label = Convert.ToString(element.GetAttribute("label"));
if (lstFolderName.Contains(label) == false)
lstFolderName.Add(label, label);
//for creating new catalog
string rootFolder = this.Server.MapPath(ConfigurationManager.AppSettings["rootfolder"]);
rootFolder = rootFolder.Replace("\\Web", "");
string folderpath = rootFolder + "\\" + label;
CreateNewCatalog(label, folderpath);
}
FolderName.DataSource = lstFolderName;
FolderName.DataValueField = "Key";
FolderName.DataTextField = "Value";
FolderName.DataBind();
FolderName.Items.Insert(0, new ListItem("[--Select Folder Name--]", "any"));
}
public string fillthefolderItem()
{
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("KMSLocal.xml"));
string folderName = FolderName.SelectedItem.Text.Trim();
XmlNodeList elements = doc.SelectNodes("//folder");
foreach (XmlElement element in elements)
{
string labelText = Convert.ToString(element.GetAttribute("label"));
if (labelText.Equals(folderName) == true)
{
string xPathExpression = "//folder[@label='" + labelText + "']/file";
XmlNodeList FileLabel = doc.SelectNodes(xPathExpression);
StringBuilder fileNameList = new StringBuilder();
string FilelabelText = "";
foreach (XmlElement fileElement in FileLabel)
{
FilelabelText = Convert.ToString(fileElement.GetAttribute("label"));
fileNameList.Append("'" + FilelabelText + "'");
fileNameList.Append(",");
}
int length = fileNameList.Length;
return Convert.ToString(fileNameList.Remove(length - 1, 1));
}
}
return null;
}
public string BinddataThroughQuery()
{
string Composer = " AND ";
if (SearchString != null)
{
if (FSRestVal.SelectedValue.Equals("any") == false)
{
if (FSRestVal.SelectedValue.Equals("other") == false)
TheQuery = Composer + "size" + FSRest.SelectedValue.ToString() + FSRestVal.SelectedValue.ToString() + "" + TheQuery;
else
TheQuery = Composer + "size" + FSRest.SelectedValue.ToString() + FSRestOther.Text + "" + TheQuery;
}
if ((DocAuthorRestriction.Text).Equals("") == false)
TheQuery = Composer + "CONTAINS(DocTitle,'" + DocAuthorRestriction.Text.ToString() + "')" + TheQuery;
if (FMMod.SelectedValue.Equals("any") == false)
{
if (FMMod.SelectedValue.Equals("since") == false)
//TheQuery = Composer + "(write > " + FMMod.SelectedValue.ToString() +" AS VT_FILETIME"+") " + TheQuery;
TheQuery = Composer + "CONTAINS(write,'" + FMMod.SelectedValue.ToString() + "')" + TheQuery;
else
TheQuery = Composer + "(write > " + Convert.ToDateTime(FMModDate.Text.ToString()) + ") " + TheQuery;
//TheQuery = Composer + "CONTAINS(write,'" + FMModDate.Text.ToString() + "')" + TheQuery;
}
if ((FileNameRestriction.Text.Equals("") == false) && (FileNameRestriction.Text.Equals("any") == false))
TheQuery = Composer + "CONTAINS(Filename,'" + FileNameRestriction.Text.ToString() + "')" + TheQuery;
//TheQuery = Composer + "CONTAINS(Directory ,'" + FolderNameText() + "')" + TheQuery;
}
return TheQuery;
}
protected void ShowFile(object sender, CommandEventArgs Args)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(Args.CommandName.ToString());
string[] splt = sb.ToString().Split('\\');
string queryString = sb.Replace(splt[0], "").ToString();
queryString = sb.Replace(splt[1], "").ToString();
queryString = sb.Remove(0, 2).ToString();
Prereview(queryString.ToString());
}
public void Prereview(string filepathString)
{
string filepath = Server.MapPath("~/" + filepathString);
// Create New instance of FileInfo class to get the properties of the file being downloaded
FileInfo file = new FileInfo(filepath);
// Checking if file exists
if (file.Exists)
{
// Clear the content of the response
Response.ClearContent();
// LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
// Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Disposition", "inline; filename=" + file.Name);
// Add the file size into the response header
Response.AddHeader("Content-Length", file.Length.ToString());
// Set the ContentType
Response.ContentType = ReturnExtension(file.Extension.ToLower());
// Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
Response.TransmitFile(file.FullName);
// End the response
Response.End();
}
}
public void CreateNewCatalog(string catalogName, string catalogPath)
{
CIODMLib.AdminIndexServerClass existingCatalog = new CIODMLib.AdminIndexServerClass();
bool FoundCatalog = existingCatalog.FindFirstCatalog();
while (!FoundCatalog)
{
CIODMLib.AdminIndexServerClass obj = new CIODMLib.AdminIndexServerClass();
obj.Stop();
obj.AddCatalog(catalogName, catalogPath);
CIODMLib.ICatAdm obj2 = (CIODMLib.ICatAdm)obj.GetCatalogByName(catalogName);
CIODMLib.IScopeAdm obj3 = (CIODMLib.IScopeAdm)obj2.AddScope(catalogPath, false, null, null);
obj3.Alias = "KMSLOCAL";
obj3.Path = catalogPath;
obj.Start();
FoundCatalog = existingCatalog.FindNextCatalog();
}
}
public string ReturnExtension(string fileExtension)
{
switch (fileExtension)
{
case ".htm":
case ".html":
case ".log":
return "text/HTML";
case ".txt":
return "text/plain";
case ".doc":
return "application/ms-word";
case ".tiff":
case ".tif":
return "image/tiff";
case ".asf":
return "video/x-ms-asf";
case ".avi":
return "video/avi";
case ".zip":
return "application/zip";
case ".xls":
case ".csv":
return "application/vnd.ms-excel";
case ".gif":
return "image/gif";
case ".jpg":
case "jpeg":
return "image/jpeg";
case ".bmp":
return "image/bmp";
case ".wav":
return "audio/wav";
case ".mp3":
return "audio/mpeg3";
case ".mpg":
case "mpeg":
return "video/mpeg";
case ".rtf":
return "application/rtf";
case ".asp":
return "text/asp";
case ".pdf":
return "application/pdf";
case ".fdf":
return "application/vnd.fdf";
case ".ppt":
return "application/mspowerpoint";
case ".dwg":
return "image/vnd.dwg";
case ".msg":
return "application/msoutlook";
case ".xml":
case ".sdxl":
return "application/xml";
case ".xdp":
return "application/vnd.adobe.xdp+xml";
default:
return "application/octet-stream";
}
}
protected void FolderName_SelectedIndexChanged(object sender, EventArgs e)
{
ddlFolderName = FolderName.SelectedValue.ToString().Trim();
}
}