如何修改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
相关产品推荐
相关产品推荐

