2016-06-20 1 views
0

Я пытаюсь запросить Elasticsearch и получаю только те результаты, которые имеют определенное поле.Python elasticsearch возвращает только записи, имеющие определенное поле

Как запросить документы, имеющие поле fields.EventData.PGID, и игнорировать те, которые этого не делают?

datadict = es.search(index=idx1, 
        q='run_id:"Run001" AND "fields.EventData.PGID exists"', 
        sort='fields.System.TimeCreated.SystemTime', 
        size=1000) 

Путь событие записывается в ES противоречив и такой мне нужно найти только те, где зарегистрировали PGID. Я попытался сделать блок try в коде Python, пытаясь получить доступ к полю из возвращаемых значений и проигнорировать его, если я получу KeyError, но из-за ограничения на количество элементов, которые вы можете получить в качестве результата запроса, в некоторых случаях у меня есть все мои результаты не имеют PGID, поэтому я просто трачу впустую запрос и не могу получить доступ к фактическим результатам, поэтому я хотел бы, чтобы эта фильтрация выполнялась на уровне запросов.

ответ

1

Вы можете попробовать с этим отфильтрованного запроса

{ 
    "size": 1000, 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": { 
      "exists": { 
       "field": "fields.EventData.PGID" 
      }, 
      "term": { 
       "run_id": "Run001" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Я думаю, вы можете также добавить сортировку к запросу

+0

Это действительный JSON? Что относительно '" size ": 1000" query "'? –

+0

он уже был в редакции. –

+0

Это работает, спасибо. –

Смежные вопросы