FTIndex搜索中的日期比较错误

时间:2014-07-19 16:55:55

标签: full-text-search xpages

我遇到的情况是,同一个数据库与多个服务器上的副本副本一起存在。问题是服务器并不都具有相同的默认日期格式。

因此服务器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比较似乎无法根据日期格式进行调整。任何想法或建议。

3 个答案:

答案 0 :(得分:0)

bill - 您是否尝试通过从存储值的日期/时间组件构建仅日期字符串来强制dstring值成为所需格式?我的意思是拉出月,日和年,并从这些作品中建立日期。

答案 1 :(得分:0)

据我所知,FT搜索语法与语言环境无关。它总是接受"月/日/年"格式,只要该字段具有日期/时间值。数据时间值也存储为与语言环境无关。

我也看到你使用了[FIELDNAME > VALUE]格式。我很惊讶它适用于其他服务器,因为正确的格式应为[FIELDNAME] > VALUEhere

问题可能是代码中的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客户端中使用它,以帮助仔细检查我没有犯错。