Получите документы, которые можно упростить, старше определенного возраста за считанные минуты - PullRequest
0 голосов
/ 21 июня 2019

У меня есть поле в некоторых моих документах, если они были запрошены ранее, что является отметкой времени 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.

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Почему бы просто не использовать date math ?

{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "bool": {
            "must_not": [
              {
                "exists": {
                  "field": "timelock"
                }
              }
            ]
          }
        },
        {
          "range": {
            "timelock": {
              "lt": "now-10m"
            }
          }
        }
      ]
    }
  }
}
1 голос
/ 21 июня 2019

Мне неизвестен синтаксис Python, но я могу предложить с помощью кода sudo использовать следующую логику:

compare_stamp = current_timestamp - 600
if 'timelock' exists:
    if timelock < compare_stamp:
        include document
    else:
        exclude document
else:
    include document

Поскольку вы легко можете получить compare_stamp в скрипте Python.Это значение затем может быть использовано в эластичном запросе ниже:

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must_not": [
              {
                "exists": {
                  "field": "timelock"
                }
              }
            ]
          }
        },
        {
          "range": {
            "timelock": {
              "lt": compare_timestamp
            }
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...