具有空字段的Lucene文档容器

时间:2013-04-02 13:59:35

标签: java lucene

我有一个桌面应用程序  实现lucene 3.6.2搜索引擎  用于数据库搜索。  数据库包含列   同时包含date和char数据类型 。某些列还可以包含空字段。   Datetools也用于将Date转换为 由Lucene分析的字符串  然而,当lucene不是时,看起来就像 能够从中添加空字段  日期列到Document容器 用于分析。

我在下面提供代码段:

 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);
         }



   }   

任何建议。

1 个答案:

答案 0 :(得分: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));