You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Solr last_index_time格式以满足增量导入的日期对比需求

这事儿好办!要把Solr的last_index_time(格式yyyy-MM-dd HH:mm:ss)转换成你需要的ISO 8601格式(yyyy-MM-dd'T'HH:mm:ss.SSS'Z'),咱们分几种常用场景来实现:

1. 直接在Solr DIH(数据导入处理器)里处理

如果是在DIH的导入流程中需要转换,你可以用ScriptTransformer写个简单脚本处理,在data-config.xml里配置:

<transformer name="script" class="org.apache.solr.handler.dataimport.ScriptTransformer">
  <str name="script">
    function transformRow(row) {
      // 获取Solr的last_index_time值
      var lastIndex = row.get('last_index_time');
      // 替换空格为T,补上.000Z(因为Solr时间默认无毫秒)
      var formattedTime = lastIndex.replace(' ', 'T') + '.000Z';
      row.put('formatted_last_index', formattedTime);
      return row;
    }
  </str>
</transformer>

处理后就能拿到符合要求的格式,直接和你的更新日期对比即可。

2. 用代码获取并转换(Java/Python示例)

如果是在外部脚本或程序里处理Solr返回的last_index_time:

Java 实现

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class SolrDateConverter {
    public static void main(String[] args) {
        String solrLastTime = "2019-01-30 10:07:58";
        // 解析Solr时间格式
        DateTimeFormatter solrFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime localDt = LocalDateTime.parse(solrLastTime, solrFormatter);
        
        // 转换为带Z的UTC格式(带毫秒)
        DateTimeFormatter targetFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        String formattedTime = localDt.atZone(ZoneId.of("UTC")).format(targetFormatter);
        
        System.out.println(formattedTime); // 输出:2019-01-30T10:07:58.000Z
    }
}

Python 实现

from datetime import datetime
import pytz

solr_last_time = "2019-01-30 10:07:58"
# 解析Solr时间
dt = datetime.strptime(solr_last_time, "%Y-%m-%d %H:%M:%S")
# 转换为UTC时区的ISO格式,替换+00:00为Z
dt_utc = pytz.utc.localize(dt)
formatted_time = dt_utc.isoformat().replace("+00:00", "Z")
# 如果需要强制补毫秒0,也可以用strftime:
# formatted_time = dt.strftime("%Y-%m-%dT%H:%M:%S.000Z")

print(formatted_time) # 输出:2019-01-30T10:07:58Z 或者带.000的版本

关键注意点

  • 时区一致性:一定要确认Solr的last_index_time是UTC时间还是服务器本地时间,转换时要对应你的更新日期的时区(你的格式带Z,是UTC),否则时间对比会出现偏差。
  • 毫秒补全:你的日期格式带毫秒,而Solr默认的last_index_time没有毫秒位,转换时补.000即可,不影响时间对比的准确性。

内容的提问来源于stack exchange,提问作者rahulchauhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:48:34