2016-06-20 3 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가 기록 된 이벤트 만 찾아야합니다. 나는 반환 된 값에서 필드에 액세스하려고 시도한 Python 코드에서 try 블록을 시도하고 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

감사합니다. –

관련 문제