如何计算 ElasticSearch 中两个日期时间之间的差异
How to calculate difference between two datetime in ElasticSearch
我正在使用 ES,我需要一个查询 returns 两个日期时间之间的差异(mysql timediff),但没有找到 ES 的任何功能来做到这一点。谁能帮帮我?
MySQL 查询
SELECT SEC_TO_TIME(
AVG(
TIME_TO_SEC(
TIMEDIFF(r.acctstoptime,r.acctstarttime)
)
)
) as average_access
FROM radacct
谢谢!
最好的是脚本化字段。如果您启用了动态脚本并且这些日期字段在映射中定义为日期,则上述搜索查询应该有效。
{
"script_fields": {
"test1": {
"script": "doc['acctstoptime'].value - doc['acctstarttime'].value"
}
}
}
请注意,您将在 epoch 中得到结果,您需要将其转换为您的面额。
您可以阅读 scripted field here and some of its examples here。
这是另一个使用脚本字段的示例。它将日期转换为自纪元以来的毫秒数,减去两者并将结果转换为两个日期之间的天数。
{
"query": {
"bool": {
"must": [
{
"exists": {
"field": "priorTransactionDate"
}
},
{
"script": {
"script": "(doc['transactionDate'].date.millis - doc['priorTransactionDate'].date.millis)/1000/86400 < 365"
}
}
]
}
}
}
我正在使用 ES,我需要一个查询 returns 两个日期时间之间的差异(mysql timediff),但没有找到 ES 的任何功能来做到这一点。谁能帮帮我?
MySQL 查询
SELECT SEC_TO_TIME(
AVG(
TIME_TO_SEC(
TIMEDIFF(r.acctstoptime,r.acctstarttime)
)
)
) as average_access
FROM radacct
谢谢!
最好的是脚本化字段。如果您启用了动态脚本并且这些日期字段在映射中定义为日期,则上述搜索查询应该有效。
{
"script_fields": {
"test1": {
"script": "doc['acctstoptime'].value - doc['acctstarttime'].value"
}
}
}
请注意,您将在 epoch 中得到结果,您需要将其转换为您的面额。
您可以阅读 scripted field here and some of its examples here。
这是另一个使用脚本字段的示例。它将日期转换为自纪元以来的毫秒数,减去两者并将结果转换为两个日期之间的天数。
{
"query": {
"bool": {
"must": [
{
"exists": {
"field": "priorTransactionDate"
}
},
{
"script": {
"script": "(doc['transactionDate'].date.millis - doc['priorTransactionDate'].date.millis)/1000/86400 < 365"
}
}
]
}
}
}