2013-07-06 2 views
6

색인을 생성하고 검색하는 방법을 모르겠습니다 (SQL 형식 datetime 포함). 연도 또는 요일 사이를 검색해야합니다. 검색을 위해 부울 쿼리를 사용하고 있습니다. 아래 코드는 숫자 필드 일반 필드 인덱싱. 당신은 표준 문자열로 색인을 저장한다면Lucene.NET에서 날짜/시간 필드를 색인 및 검색하는 방법은 무엇입니까?

 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(); 
+1

확인이 : [Lucene.Net : 내 검색 결과에 날짜 필터를 추가 할 수 있습니까?] (HTTP : // 유래 인덱싱

.com/questions/4565303/lucene-net-how-can-add-a-date-filter-to-my-search-results? answertab = votes # tab-top) –

답변

7

감사합니다. @Thomas C. G. de Vilhena 및 Mihai Soloi. 당신의 도움으로 해결책을 찾았습니다.

검색을 위해
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)); 

:

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); 
+0

색인 생성? MILLISECOND 해상도를 필터링하는 동안 같은 날에 여러 번 등록 할 수 있습니다. 두 해상도 모두 동일해야합니다 –

+0

감사합니다. @Mihai Soloi가 내 시간을 절약 해주었습니다. –

1

는, 예를 들어, 당신은 당신이 범위에서 검색 할 루씬 RangeQuery을 사용할 수 있습니다 201307052000002013-07-05 20:00:00에서 변환 할 경우.

죄송합니다. 예제 코드를 제공하지 않았지만 .NET API에 익숙하지 않습니다.

관련 문제