我有外部ES实例,需要查询6个月以上的文档。问题是它们存储这样的时间戳:
"timestamp": {
"year": 2018,
"monthValue": 5,
"dayValue": 1,
}
是否可以创建一个结合这些字段并获取文档“ lt”,“ now-6m”或类似名称的范围查询?
答案 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更熟悉的人可以为您提供帮助。