查询适用于日期的差异

时间:2016-06-02 10:39:46

标签: elasticsearch

考虑我有一个包含createdDateclosedDate的文档。现在我想查找(closedDate - createdDate) > 2所有文档。我无法在范围字段中应用脚本。任何线索如何继续这一点。 我认为这可能是使用脚本可能的。我不能以任何方式通过查询来执行此操作。

不是像

那样执行此操作的方法
{
    "range" : {
        "date" : {
            "gt" :  "{createdDate} - {closedDate}/d > 2"
        }
    }
}

2 个答案:

答案 0 :(得分:1)

通过查询执行此操作的唯一方法是将前面的附加持续时间字段编入索引到JSON文档中。我个人会以毫秒为单位存储持续时间,并使用过滤器进行查询。

如果这是不可接受的,则必须使用脚本字段。在Elasticsearch文档中描述了herehere

最好将IMO保存到每个文档,特别是如果您经常使用持续时间进行进一步分析。附加字段不会花费大量内存,但减少了计算的需要(因此可以加快查询时间)特别是在Elasticsearch内存中应该不是一个大问题。

答案 1 :(得分:1)

是的,您可以通过脚本

执行此操作
{
  "query": {
    "bool": {
      "filter": [
        {
          "script": {
            "script": "(doc.closedDate.value - doc.createdDate.value)/86400000 > 2"
          }
        }
      ]
    }
  }
}

注意:请务必enable dynamic scripting以尝试此操作。

但是,最好在索引时计算差异,然后在该差异字段上使用范围查询。