1using System; 2using System.Data; 3using System.IO; 4using Lucene.Net.Analysis; 5using Lucene.Net.Analysis.Standard; 6using Lucene.Net.Documents; 7using Lucene.Net.Search; 8using Lucene.Net.QueryParsers; 9using Lucene.Net.Index; 10using Lucene.Net.Util; 11 12namespace LuceneEngine.Search 13{ 14 public class SearchFiles 15 { 16 #region Properties ... 17 18 private string mstrIndexLocation = ""; 19 public string IndexLocation 20 { 21 get { return mstrIndexLocation; } 22 set { mstrIndexLocation = value; } 23 } 24 private string mstrSearchFor = ""; 25 public string SearchFor 26 { 27 get { return mstrSearchFor; } 28 set { mstrSearchFor = value; } 29 } 30 private DateTime mdteLastWriteFrom = Convert.ToDateTime("1/1/1990"); 31 public DateTime LastWriteFrom 32 { 33 get { return mdteLastWriteFrom; } 34 set { mdteLastWriteFrom = value; } 35 } 36 private DateTime mdteLastWriteTo = DateTime.Today.AddDays(1); 37 public DateTime LastWriteTo 38 { 39 get { return mdteLastWriteTo; } 40 set { mdteLastWriteTo = value; } 41 } 42 private int mintNumHitsRequested = 10; 43 public int NumHitsRequested 44 { 45 get { return mintNumHitsRequested; } 46 set { mintNumHitsRequested = value; } 47 } 48 private long mlngNumHitsFound = 0; 49 public long NumHitsFound 50 { 51 get { return mlngNumHitsFound; } 52 } 53 private string mstrResultsXML = ""; 54 public string ResultsXML 55 { 56 get { return mstrResultsXML; } 57 } 58 private DataView mobjResultsDataView; 59 public DataView ResultsDataView 60 { 61 get { return mobjResultsDataView; } 62 } 63 private long mlngTotalTime = 0; 64 public long TotalTime 65 { 66 get { return mlngTotalTime; } 67 } 68 private string mstrError = ""; 69 public string Error 70 { 71 get { return mstrError; } 72 } 73 #endregion 74 #region StartSearch ... 75 76 public bool StartSearch() 77 { 78 bool bResult = false; 79 80 Searcher objSearcher = new IndexSearcher(mstrIndexLocation); 81 Analyzer objAnalyzer = new StandardAnalyzer(); 82 try 83 { 84 //Perform Search 85 DateTime dteStart = DateTime.Now; 86 Query objQuery = QueryParser.Parse(mstrSearchFor, "contents", objAnalyzer); 87 //Add date range filter 88 DateFilter objFilter = new DateFilter("last_write_time", 89 Date.GetTime(mdteLastWriteFrom), 90 Date.GetTime(mdteLastWriteTo.AddDays(1))); 91 Hits objHits = objSearcher.Search(objQuery, objFilter); 92 DateTime dteEnd = DateTime.Now; 93 mlngTotalTime = (Date.GetTime(dteEnd) - Date.GetTime(dteStart)); 94 mlngNumHitsFound = objHits.Length(); 95 96 //Generate results - convert to XML 97 mstrResultsXML = ""; 98 if (mlngNumHitsFound > 0) 99 { 100 mstrResultsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Results>"; 101 //Loop through results 102 for (int i = 0; i < objHits.Length(); i++) 103 { 104 try 105 { 106 //Get the next result 107 Document objDocument = objHits.Doc(i); 108 //Extract the data 109 string strPath = objDocument.Get("path"); 110 if (strPath == null) {strPath = "";} 111 string strLastWrite = objDocument.Get("last_write_time"); 112 if (strLastWrite == null) 113 strLastWrite = "unavailable"; 114 else 115 { 116 strLastWrite = DateField.StringToDate(strLastWrite).ToShortDateString(); 117 } 118 double dblScore = objHits.Score(i) * 100; 119 string strScore = String.Format("{0:00.00}", dblScore); 120 //Add results as an XML row 121 mstrResultsXML += "<Row>"; 122 mstrResultsXML += "<Sequence>" + (i + 1).ToString() + "</Sequence>"; 123 mstrResultsXML += "<Path>" + strPath + "</Path>"; 124 mstrResultsXML += "<LastUpdated>" + strLastWrite + "</LastUpdated>"; 125 mstrResultsXML += "<Score>" + strScore + "%" + "</Score>"; 126 mstrResultsXML += "</Row>"; 127 } 128 catch 129 { 130 break; 131 } 132 } 133 //Finish off XML 134 mstrResultsXML += "</Results>"; 135 136 //Build Dataview (to bind to datagrid 137 DataSet objDS = new DataSet(); 138 StringReader objSR = new StringReader(mstrResultsXML); 139 objDS.ReadXml(objSR); 140 objSR = null; 141 mobjResultsDataView = new DataView(); 142 mobjResultsDataView = objDS.Tables[0].DefaultView; 143 } 144 145 //Finish up 146 objSearcher.Close(); 147 bResult = true; 148 } 149 catch (Exception e) 150 { 151 mstrError = "Exception: " + e.Message; 152 } 153 finally 154 { 155 objSearcher = null; 156 objAnalyzer = null; 157 } 158 return bResult; 159 } 160 #endregion 161 } 162}