Поиск по метке времени, созданной на лету вasticsearch - PullRequest
0 голосов
/ 17 января 2019

У меня есть внешний экземпляр ES, который мне нужно запросить для документов старше 6 месяцев. Проблема в том, что они хранят метку времени так:

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

Можно ли создать запрос диапазона, объединяющий эти поля и получающий документы "lt" "now-6m" или что-то в этом роде?

1 Ответ

0 голосов
/ 18 января 2019

Вы сможете выполнить это, используя 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"
          }
        }
      }
    }
  }
}

Я только один раз использовал Безболезненно , поэтому я недостаточно знаком, чтобы дать идеальный ответ. Но это может помочь вам начать. Если вы застряли, просто задайте другой вопрос, относящийся к вашей проблеме, и вам может помочь кто-то, кто более знаком с Java / Painless.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...