搜索Elasticsearch中即时创建的时间戳

时间:2019-01-17 17:10:27

标签: elasticsearch

我有外部ES实例,需要查询6个月以上的文档。问题是它们存储这样的时间戳:

"timestamp": {
            "year": 2018,
            "monthValue": 5,
            "dayValue": 1,
    }

是否可以创建一个结合这些字段并获取文档“ lt”,“ now-6m”或类似名称的范围查询?

1 个答案:

答案 0 :(得分:0)

您应该可以使用Script Query完成此操作。这样一来,您就可以使用字段值创建日期对象,然后将该日期与当前日期进行比较。

名义示例

{
  "query": {
    "bool" : {
      "filter" : {
        "script" : {
          "script" : {
            "params": {
              "monthRange": 6
            },
            "source": """
              def today = new Date();
              def timestamp = new Date(doc['timestamp']['year'].value, doc['timestamp']['monthValue'].value, doc['timestamp']['dayValue'].value);

              /* Date comparison magic (I don't know Java, so you're on your own here) */

              /* return result of comparison */
            """,
            "lang": "painless"
          }
        }
      }
    }
  }
}

我以前只使用过Painless,所以我不太熟悉,无法给出完美的答案。但这可以帮助您入门。如果您陷入困境,只需问一个特定于您所遇到问题的问题,那么对Java / Painless更熟悉的人可以为您提供帮助。