2013-04-02 61 views
0

我有一個桌面應用程序, 實現了用於數據庫搜索的lucene 3.6.2搜索引擎 。 數據庫包含日期和字符數據類型爲 的列 。某些列還可以包含空字段。 Datetools也使用Lucene的 到日期轉換爲字符串 分析但是看起來當Lucene是不是 能夠從 日期列添加空字段到文檔容器 進行分析等。具有空字段的Lucene文檔容器

我提出下面的代碼片斷:

doc = new Document(); 


     if(rs.getDate("DATE_OF_LETTER")== null) 
     { doc.add(new Field("date_of_letter","",Field.Store.YES,Field.Index.ANALYZED)); } 
     else { 
     doc.add(new Field("date_of_letter",DateTools.dateToString(rs.getDate("DATE_OF_LETTER"), 
       DateTools.Resolution.DAY),Field.Store.YES,Field.Index.ANALYZED)); 
     }  

     if(rs.getDate("DATE_RECEIVED")== null) 
     { doc.add(new Field("date_received","",Field.Store.YES,Field.Index.ANALYZED)); } 
     else { 
      doc.add(new Field("date_received",DateTools.dateToString(rs.getDate("DATE_RECEIVED"), 
       DateTools.Resolution.DAY),Field.Store.YES,Field.Index.ANALYZED)); 
     }  

     if(rs.getString("REMARKS")== null) 
     { doc.add(new Field("remarks","",Field.Store.YES,Field.Index.ANALYZED)); } 
     else { 
     doc.add(new Field("remarks",rs.getString("REMARKS"),Field.Store.YES,Field.Index.ANALYZED)); } 

      if(rs.getDate("DATE_DISPATCHED")== null) 
     { doc.add(new Field("date_dispatched","",Field.Store.YES,Field.Index.ANALYZED)); } 
     else { 
     doc.add(new Field("date_dispatched",DateTools.dateToString(rs.getDate("DATE_DISPATCHED"), 
       DateTools.Resolution.MINUTE),Field.Store.YES,Field.Index.ANALYZED)); 

       }  
      } 
     iw.addDocument(doc); 
     } 



    } 

任何建議。

+0

您是否收到任何錯誤或者當您檢查索引後字段值只是null? –

+0

即使存在命中但我仍未在netbeans控制檯上收到錯誤,但lucene不會返回任何結果。並請如何檢查索引,請對lucene有所瞭解 – CodeAngel

+0

有一種工具可以檢查索引:http://www.getopt.org/luke/ - 查看它並檢查是否設置了字段在lucene索引中。 –

回答

0

這條線:

doc.add(new Field("date_received","",Field.Store.YES,Field.Index.ANALYZED)); 

並沒有真正做任何事情。沒有什麼可以索引的。它可能會存儲該字段(我不確定,馬上就會關閉),但它肯定不會以任何方式編入索引,因此無法搜索。 Lucene索引標記,一個空字符串沒有標記,所以沒有任何索引,沒有東西要搜索。

如果您希望能夠搜索空值,您應該爲它們編制一個佔位符值,例如;

doc.add(new Field("date_received","null",Field.Store.YES,Field.Index.ANALYZED)); 
相關問題