我正在尝试使用Solr的DataImportHandler来索引来自Oracle DB的一些文档,除了正确读取Oracle Date列到我的文档中之外,一切正常.我将Solr模式中的字段定义为field name=release_date type=date indexed=true s...
我正在尝试使用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日期获取正确的时间
- cascade级联关系操作案例详解 2023-03-11
- java模拟实现银行ATM机操作 2022-11-16
- 使用mongoTemplate实现多条件加分组查询方式 2023-02-10
- mybatis log4j2打印sql+日志实例代码 2023-05-08
- 微信支付 开发账号体系各参数详解 2023-08-02
- java开发RocketMQ生产者高可用示例详解 2023-04-06
- 基于SpringBoot整合SSMP的详细教程 2023-04-07
- SpringBoot整合Docker实现一次构建到处运行的操作方法 2023-06-17
- SpringBoot集成Graphql Query实战示例 2023-05-18
- JavaSerialVersionUID是什么意思 2023-10-08