gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:21 24 4
gpt4 key购买 nike

我正在尝试使用 Solr 的 DataImportHandler 为 Oracle 数据库中的一些文档编制索引,除了将 Oracle 日期列正确读入我的文档外,一切正常。

我的 Solr 模式中的字段定义为

<field name="release_date" type="date" indexed="true" stored="true" multiValued="false"/>

我首先尝试在我的 DataImportHandler 中对日期列执行基本的选择语句,但所有日期都使用不正确的时间值编制索引。例如,数据库中的日期为 Jan. 12, 2004 09:28 AM (EST) 被索引为:

<date name="release_date">2004-01-12T05:00:00Z</date>

所有日期值都有正确的日期,但它们的时间都为 T05:00:00Z。我对正在发生的事情的最佳猜测是它正在从数据库中读取午夜时间并将其转换为 UTC。如果是这种情况,我希望正确的值为 T14:28:00Z。

为什么它不提取数据库列的时间部分?我知道有一个 transformer for dates随 DIH 一起提供,但我不太清楚它应该如何工作。我也试过做

<field column="RELEASE_DATE" name="release_date" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss'Z'" /> 

在 DIH 中,但这似乎没有任何改变。

最佳答案

这是与最后一个答案一起使用的完整代码(为了更加清晰)。

在您的 data-config.xml 文件中,从数据库中读取日期并将其转换为时间戳:

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,但不会直接映射到日期。因此需要脚本转换器。因此我们引入了script: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 日期获取正确的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10111517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com