当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch-两个日期字段之间的差异

勾岳
2023-03-14

我在ElasticSearch中有一个索引,其中包含日期类型的两个字段(metricsTime

doc['arrivalTime'].value - doc['metricsTime'].value

但是,在导航到Kibana的Discover选项卡时,我得到了以下错误消息:class_cast_exception:无法对类型[org . joda . time . mutable datetime]和[org . joda . time . mutable datetime]应用[-]操作。这看起来与https://discuse . elastic . co/t/problem-in-difference-between-two-dates/121655中提到的错误相同。但是那一页的答案表明我的剧本是正确的。你能帮忙吗?

谢谢!

{
  "_index": "events",
  "_type": "_doc",
  "_id": "HLV274_1537682400000",
  "_version": 1,
  "_score": null,
  "_source": {
    "metricsTime": 1537682400000,
    "box": "HLV274",
    "arrivalTime": 1539930920347
  },
  "fields": {
    "metricsTime": [
      "2018-09-23T06:00:00.000Z"
    ],
    "arrivalTime": [
      "2018-10-19T06:35:20.347Z"
    ]
  },
  "sort": [
    1539930920347
  ]
}

共有1个答案

霍永年
2023-03-14

检查Lucene表达式列表以检查哪些表达式可用于日期字段以及如何使用它们

为简单起见,请检查以下查询。我在创建的示例索引中创建了两个字段 metricsTimearriveTime

POST mydateindex/mydocs/1
{
  "metricsTime": "2018-09-23T06:00:00.000Z",
  "arrivalTime": "2018-10-19T06:35:20.347Z"
}
POST mydateindex/_search
{ "query": {
    "bool": { 
      "must": {
        "match_all": {

        }
      },
        "filter": {
          "bool" : {
            "must" : {
                "script" : {
                    "script" : {
                        "inline" : "doc['arrivalTime'].date.dayOfYear - doc['metricsTime'].date.dayOfYear > params.difference",
                        "lang"   : "painless",
                        "params": {
                          "difference": 2
                        }
                    }
                }
            }
        }
        }

    }
  }
}

请注意查询中的下一行

"inline" : "doc['arrivalTime'].date.dayOfYear - doc['metricsTime'].date.dayOfYear > params.difference"

现在,如果将值从 2 更改为 26(这比日期的差值多一个),则会看到上述查询不会返回文档。

但无论如何,我已经提到了这个查询作为一个例子,说明如何使用脚本来比较两个不同的查询,请参考我共享的链接。

 类似资料:
  • 问题内容: 如何以格式计算两个日期之间的差并以秒或毫秒为单位获取结果? 问题答案: 因此,您可以为您的目的使用。

  • 问题内容: 功能: 我的要求是找出几年中两个日期之间的差异。所以,我写了上面的函数。在此,如果d1为NULL,则将其分配为当前日期。但是,它会产生如下所示的错误。 有没有人能帮助我解决这个问题。 问题答案: 尝试 : 函数以以下格式返回两个日期之间的年,月和天数: 从此输出中使用,以选择唯一的年份差异。也没有必要把if语句来处理,因为我已经添加返回第一值,所以,如果是它返回 功能结构: 函数调用:

  • 问题内容: 假设我们有3个领域, 用户启动和停止多个记录,例如下面的bob已启动和停止了两个记录。 我需要知道每个用户(即按用户分组,而不仅是每一行)的平均时间(即开始和结束之间的时间差),以小时为单位。 我不太了解如何进行差异,平均和分组?有什么帮助吗? 问题答案: 您没有为差异指定所需的粒度。这可以在几天内完成: 如果要以秒为单位,请使用: datediff可以通过更改第一个参数(ss,mi,

  • 问题内容: 我必须找到java中两个不同日期对象之间的时间差异,如果该时间超过5秒,我必须使会话无效。 这是场景: 我有一个jsp页面,它每5秒设置一次会话 我还有另一个jsp页面,每1秒访问一次, 现在,我必须在我提到的另一个jsp中进行比较,并使会话无效, 因此,如果差异超过5秒,则会话无效。 问题答案:

  • 问题内容: 我正在使用ES,并且我需要一个查询,该查询返回两个datetime(mysql timediff)之间的差,但是还没有找到ES的任何功能来做到这一点。有人可以帮助我吗? MySQL查询 谢谢! 问题答案: 最好的是脚本字段。如果您已启用动态脚本并且这些日期字段在映射中定义为日期,则上述搜索查询应该可以正常工作。 请注意,您将获得epoch的结果,您需要将其转换为面额。 您可以在此处阅读

  • 问题内容: 我想得到两个Java Date对象之间的区别。我使用了Joda-Time库。但是问题是我得到的天数差异大于实际的天数差异。 这是我的代码段: 这是我的输出: 在这里,为什么将“ 06/22/2010”设为1月22日?有人遇到类似的问题吗? 帮我朋友..提前感谢.. 问题答案: 月份是MM 在您的情况下: DateFormat formatter = new SimpleDateForm