java – 从Solr DataImportHandler中的Oracle日期获取正确的时间
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 从Solr DataImportHandler中的Oracle日期获取正确的时间,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1769字,纯文字阅读大概需要3分钟。
内容图文
![java – 从Solr DataImportHandler中的Oracle日期获取正确的时间](/upload/InfoBanner/zyjiaocheng/903/af1704f000ab46588c506b0165a95d57.jpg)
我正在尝试使用Solr的DataImportHandler来索引来自Oracle DB的一些文档,除了正确读取Oracle Date列到我的文档中之外,一切正常.
我将Solr模式中的字段定义为
<field name="release_date" type="date" indexed="true" stored="true" multiValued="false"/>
我首先尝试在DataImportHandler中只对日期列进行基本的select语句,但所有日期都使用不正确的时间值进行索引.例如,2004年1月12日上午09:28(美国东部时间)的数据库中的日期被索引为:
<date name="release_date">2004-01-12T05:00:00Z</date>
所有日期值都有正确的日期,但它们都有T05:00:00Z作为时间.我最好的猜测是,它正在将数据库中的时间读取为午夜并将其转换为UTC.如果是这种情况,我希望正确的值读取T14:28:00Z.
为什么不拿起数据库列的时间部分?我知道DIH附带了一个transformer for dates,但我并不完全清楚它应该如何工作.我也尝试过
<field column="RELEASE_DATE" name="release_date" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss'Z'" />
在DIH,但似乎没有任何改变.
解决方法:
这是完整的代码以及最后的答案(为了更加清晰).
在您的data-config.xml文件中,从DB读取日期并转换为时间戳:
select cast(STRT_DT as timestamp) as STRT_DTTS from DATES
放入DataImportHandler实体,如下所示:
<entity name="startDate" transformer="script:startDateTransform"
query="select cast(STRT_DT as timestamp) as STRT_DTTS from DATES" >
<field column="STRT_DTTS" name="STRT_DT" />
</entity>
此查询将返回oracle.sql.TIMESTAMP,但它不会直接映射到日期.因此需要脚本转换器.因此我们引入脚本:startDateTransform.在相同的data-config.xml中,您可以像这样插入JavaScript:
function startDateTransform(row){
// Get the timestamp and convert it to a date
var dateVal = row.get("STRT_DTTS").dateValue();
// Put the correct date object into the original column
row.put("STRT_DTTS", dateVal);
return row;
}
在这里,我们将时间戳转换为日期,更新列值并返回包含新信息的行.
字段STRT_DT:
<field column="STRT_DTTS" name="STRT_DT" />
现在应该包含正确的日期.
内容总结
以上是互联网集市为您收集整理的java – 从Solr DataImportHandler中的Oracle日期获取正确的时间全部内容,希望文章能够帮你解决java – 从Solr DataImportHandler中的Oracle日期获取正确的时间所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。