在ElasticSearch中有一个字符串字段,其格式为duration 00:00:00.000000
. 我想把它转换成一个总毫秒数的数字字段。
编辑:
我想过使用脚本字段,但它不起作用。
try{
String duration = doc['app.duration'].value;
String[] durationParts = new String[3];
int firstIdx = duration.indexOf(":");
int secondIdx = duration.indexOf(":", firstIdx+1);
durationParts[1] = duration.substring(firstIdx+1, secondIdx);
durationParts[2] = duration.substring(secondIdx+1);
long minutes = Long.parseLong(durationParts[1]) * 60000;
float seconds = Float.parseFloat(durationParts[2]) * 1000;
long mAndS = Math.round(minutes + seconds);
return mAndS;
}
catch(Exception e) {
return -1;
}
以上在第一行失败 String duration = doc['app.duration'].value;
我得到-1。但是如果我把第一行改成一个硬编码的值 String duration = "00:00:01.5250000";
然后我就离开了 1525
我想是的。
我不确定我做错了什么。从我使用 doc
对象是访问字段的方式。
1条答案
按热度按时间92dk7w1h1#
你可以试试
keyword
子字段,因为它包含您添加到源中的精确原始字符串值(即。00:00:00.000000
),而app.duration
字段包含分析的文本值,该值可能不是您所期望的值,具体取决于您设置的分析器。否则,获得所需内容的更简单脚本(即0和1525)如下所示:
请注意,您需要将以下行添加到
elasticsearch.yml
配置文件以启用正则表达式引擎。