我有一个桌面应用程序 实现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);
}
}
任何建议。
答案 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));