How to Index & search the Datetime field in Lucene.NET?
c#, lucene, lucene.net
Solution
Thanks @Thomas C. G. de Vilhena and Mihai Soloi. I found the solution with your help.
For indexing:
DateTime d1 = Convert.ToDateTime(dr[dc.ColumnName]);
doc.Add(new Field("Registered_Date", DateTools.DateToString(d1, DateTools.Resolution.SECOND), Field.Store.YES, Field.Index.ANALYZED));
For searching:
DateTime d1 = DateTime.Now.AddDays(-15);
var dateValue = DateTools.DateToString(d1, DateTools.Resolution.MILLISECOND);
var filter = FieldCacheRangeFilter.NewStringRange("Registered_Date",lowerVal: dateValue, includeLower: true,upperVal: null, includeUpper: false);
Problem
I don't know how to index and Search the Registred_Date(It contains sql format datetime).I need to search between years or days.where i'm using boolean query for the search.The code below is used for numeric field and ordinary field indexing. ``` IndexWriter indexWriter = new IndexWriter(dir, new StandardAnalyzer(),Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED); DataSet ds = new DataSet(); //ds contains table if (ds.Tables[0] != null) { DataTable dt = ds.Tables[0]; if (dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { //Create the Document object Document doc = new Document(); foreach (DataColumn dc in dt.Columns) { string check = dc.ToString(); if (check.Equals("Experience")) { int n=Convert.ToInt32(dr[dc.ColumnName]); NumericField numericField = new NumericField(dc.ColumnName, Field.Store.YES, true); numericField.SetIntValue(n); doc.Add(numericField); } else if(check.Equals("Registred_Date")) { } else { doc.Add(new Field(dc.ColumnName, dr[dc.ColumnName].ToString(), Field.Store.YES, Field.Index.ANALYZED)); } //Populate the document with the column name and value from our query } // Write the Document to the catalog indexWriter.AddDocument(doc); } } } // Close the writer indexWriter.Close(); ```