java – 从Solr DataImportHandler中的Oracle日期获取正确的时间

我正在尝试使用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日期获取正确的时间

基础教程推荐