Фильтр по полю, только если он существует, эластичный поиск - PullRequest
1 голос
/ 24 июня 2019

У меня есть поле даты в моих документах, и я хочу вернуть только те документы, у которых дата меньше, чем сейчас - 5 миллионов, однако не все мои документы поданы, они получают только при первом запросе по отдельности.

 documents = es.search(index='index_name', size=10000, body={
          "query": {
    "bool": {
      "must": [
                {
              "range": {
                  "time_lockout": {
                      "lt": "now-5m"
                  }
              }
          }
      ],
      "filter": [

      ],
      "should": [

      ],

      "must_not": [
      ]
    }
  }})

Так что мой псевдокод будет,

if `time_lockout` exists
    give documents that are now-5 including all documents thats dont have `time_lockout` 

Exclude documents that dat range falls withon that 5 minute window

1 Ответ

2 голосов
/ 24 июня 2019

Обновить запрос ниже:

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