如果某些文档在unix时间戳之前被单独查询过,则我在其中有一个字段:
"timelock": 1,561,081,724.254
如果某些文档从未被单独查询过,则没有此文件。我还希望有一个查询,该查询仅返回没有该字段或没有该字段但其时间戳记与当前时间之间的差大于10分钟(600秒)的文档
documents = es.search(index='index', size=10000, body={
"query": {
"bool": {
"must": [
{
"match_all": {}
},
],
"filter": [],
"should": [],
"must_not": [
]
}
}})
所以我想用伪代码可以做到:
if 'timelock' exists:
if current_time - 'timlock' > 600:
include in query
else:
exclude from query
else:
include in query
我将python模块用于ES。
答案 0 :(得分:1)
我不了解python语法,但是我可以通过sudo代码建议使用以下逻辑:
compare_stamp = current_timestamp - 600
if 'timelock' exists:
if timelock < compare_stamp:
include document
else:
exclude document
else:
include document
因为您可以轻松地在Python脚本中获取compare_stamp
。然后可以在以下弹性查询中使用该值:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must_not": [
{
"exists": {
"field": "timelock"
}
}
]
}
},
{
"range": {
"timelock": {
"lt": compare_timestamp
}
}
}
]
}
}
}
答案 1 :(得分:1)
为什么不简单地使用date math?
{
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"bool": {
"must_not": [
{
"exists": {
"field": "timelock"
}
}
]
}
},
{
"range": {
"timelock": {
"lt": "now-10m"
}
}
}
]
}
}
}