我遇到的情况是,同一个数据库与多个服务器上的副本副本一起存在。问题是服务器并不都具有相同的默认日期格式。
因此服务器A的日期格式为mm-dd-yyyy,服务器B的日期格式为yyyy-mm-dd。
因此,在服务器A上运行的进程会设置一个名为CompletedDate的字段,并存储日期为06-25-2014。该文档将复制到服务器B。
部分用户流程是使用此代码段在全文索引中搜索:
var dt:NotesDateTime = session.createDateTime("Today");
dt.adjustDay(-30));
var dString:String = dt.getDateOnly();
var qString = "([WFSCompletedDate > " + dString + "])";
var dc:NotesDocumentCollection = appDB.FTSearch(qString);
如果客户端访问服务器A上的数据库,则dString的值为今天的日期 - 30天= 06-19-2014,搜索成功。如果在服务器B上访问,则dString是2014-06-19,并且FTSearch不仅不会返回任何导致错误的内容 - HTTP JVM:com.ibm.xsp.exception.EvaluationExceptionEx:FTIndex执行JavaScript动作表达式时出错试图将2014-06-19评估为2014年7月19日的文件日期。
我无法强制执行所有副本服务器具有相同的默认日期格式,并且我可以在数据库中的文档中混合使用日期,因为它们可以在任何服务器上创建。正常的日期格式似乎可以解决这些差异,但FTIndex比较似乎无法根据日期格式进行调整。任何想法或建议。
答案 0 :(得分:0)
bill - 您是否尝试通过从存储值的日期/时间组件构建仅日期字符串来强制dstring值成为所需格式?我的意思是拉出月,日和年,并从这些作品中建立日期。
答案 1 :(得分:0)
据我所知,FT搜索语法与语言环境无关。它总是接受"月/日/年"格式,只要该字段具有日期/时间值。数据时间值也存储为与语言环境无关。
我也看到你使用了[FIELDNAME > VALUE]
格式。我很惊讶它适用于其他服务器,因为正确的格式应为[FIELDNAME] > VALUE
(here)
问题可能是代码中的dString
。请尝试以下方法:
var dt:NotesDateTime = session.createDateTime("Today");
dt.adjustDay(-30);
var jdt:java.util.Date=dt.toJavaDate();
var formatter=new java.text.SimpleDateFormat("MM/dd/yyyy");
var dString = formatter.format(jdt);
var qString = "([WFSCompletedDate] > " + dString)";
var dc:NotesDocumentCollection = appDB.FTSearch(qString);
答案 2 :(得分:0)
我还建议通过在Notes客户端中搜索进行检查。搜索栏有助于验证全文索引所期望的数据类型,以及识别任何语法问题。我倾向于打印出搜索字符串然后在Notes客户端中使用它,以帮助仔细检查我没有犯错。