2013-07-06 9 views
6

मुझे नहीं पता कि रजिस्ट्रेशन_DATE को इंडेक्स और खोज कैसे करें (इसमें एसक्यूएल प्रारूप डेटाटाइम है)। मुझे वर्षों या दिनों के बीच खोज करने की आवश्यकता है। जहां मैं खोज के लिए बूलियन क्वेरी का उपयोग कर रहा हूं। नीचे दिया गया कोड संख्यात्मक क्षेत्र के लिए उपयोग किया जाता है और सामान्य क्षेत्र अनुक्रमण।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: // stackoverflow .com/प्रश्न/4565303/लुसीन-नेट-कैसे-कर-मैं-ऐड-ए-डेट-फ़िल्टर-टू-माय-सर्च-नतीजे? answertab = वोट # टैब-टॉप) –

उत्तर

7

धन्यवाद @ थॉमस सी जी डी विलेना और मिहाई सोलोई। मुझे आपकी मदद से समाधान मिला।

अनुक्रमण के लिए:

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

दूसरे रिज़ॉल्यूशन का उपयोग क्यों नहीं करें अनुक्रमण? आप उसी दिन कई रजिस्ट्रेशन प्राप्त कर सकते हैं जब मैं मानता हूं कि आप मिलिसेकेंड रिज़ॉल्यूशन पर फ़िल्टर कर रहे हैं; दोनों संकल्प एक ही imho –

+0

होना चाहिए मैंने यह नहीं देखा कि, धन्यवाद @ मिहाई सोलोई मेरा समय बचा रहा है। –

1

आप एक मानक स्ट्रिंग के रूप में अपनी अनुक्रमणिका की दुकान चाहते हैं, तो उदाहरण के लिए आप 2013-07-05 20:00:00 से 20130705200000 में परिणत हो गया है, तो आप श्रेणियों में खोज की जाने Lucene RangeQuery उपयोग कर सकते हैं।

क्षमा करें मैंने कोई उदाहरण कोड प्रदान नहीं किया है, लेकिन मैं .NET API से परिचित नहीं हूं।

संबंधित मुद्दे