2016-10-06 1 views
0

나는 타임 스탬프 필드의 범위를 사용하여 탄성 검색에서 쿼리를 작성했습니다. 각 그룹의 최신 타임 스탬프를 찾아야합니다. 먼저 쿼리를 수행 한 다음 이름 필드별로 그룹화 한 다음 최신 타임 스탬프를 선택합니다. 하지만 작동하지 않습니다. 모든 제안을 부탁드립니다. 아래는 내가 우체부에서 검색 후 쿼리에 사용하는 내 JSON은elasticsearch - 집계에서 최신 시간 스탬프를 찾으려고합니다.

{ "쿼리": { "범위": { "타임 스탬프": { "GTE": "2016-10-05T15 : 00 : 35" "LTE": "2016-10-06T15 : 10 : 35"}} },

"aggs" : { 
    "groupbyname" : { 
     "terms" : { 
      "field" : "name" 
      }, 
      "aggs" : { 
       "selectlatesttimestamp" : { 
       "max" : { 
        "field" : "timestamp" 
       } 
      } 
     } 

    } 
} 

은}

답변

0

당신은 수행 할 top-hits 집계를 사용할 수 있습니다, 당신의 예에 따라, 당신은 할 수 다음과 같이하십시오.

{ 
    "query": { 
    "range": { 
     "timestamp": { 
     "gte": "2016-10-05T15:00:35", 
     "lte": "2016-10-06T15:10:35" 
     } 
    } 
    }, 
    "aggs": { 
    "groupbyname": { 
     "terms": { 
     "field": "name" 
     }, 
     "aggs": { 
     "top_group_hits": { 
      "top_hits": { 
      "sort": [ 
       { 
       "timestamp": { 
        "order": "desc" 
       } 
       } 
      ], 
      "size": 1 
      } 
     } 
     } 
    } 
    } 
} 

쿼리에서 비롯된 실제 결과를 사용하지 않고 집계 만 사용하는 경우 "size":0을 최상위 개체 ("query" 위)에 추가 할 수도 있습니다.

{ 
    "size": 0, 
    "query": { 
    "range": { 
     "timestamp": { 
     "gte": "2016-10-05T15:00:35", 
     "lte": "2016-10-06T15:10:35" 
     } 
    } 
    }, 
    "aggs": { 
    "groupbyname": { 
     "terms": { 
     "field": "name" 
     }, 
     "aggs": { 
     "top_group_hits": { 
      "top_hits": { 
      "sort": [ 
       { 
       "timestamp": { 
        "order": "desc" 
       } 
       } 
      ], 
      "_source": [ 
       "timestamp" 
      ], 
      "size": 1 
      } 
     } 
     } 
    } 
    } 
} 
+0

감사합니다 : 당신이 최신 타임 스탬프는이 같은 뭔가를 할 수 얻을 필요가있는 경우에만 일부 필드가 필요하면, 당신은 가기 _source 섹션을 포함 할 수

예를 들어, 집계 안타 , 그것은 작동해야하지만, 그것은 여전히 ​​그 시간 범위에서 같은 이름을 가진 여러 문서를 반환하는 몇 가지 이유로 보인다. 우리가 타임 스탬프를 정의하거나 맵핑 한 방식으로 뭔가 다른 것인지 궁금합니다. 우리가 "name"과 "timestamp"를 어떻게 정의했는지에 대한 JSON은 ... "name": { "type": "string" } "timestamp": { "type": "date" , "형식": "strict_date_optional_time || epoch_millis" – BZelasky

+0

내 결과 집합을 얻는 방법은 다음과 같습니다. https://jsonblob.com/57f69a7ee4b0bcac9f7b677d 나에게 좋을 것 같습니다. 그룹당 하나의 문서에 최신 타임 스탬프가 있습니다. 'name' 필드는''index ':''not_analyzed''로 설정해야합니다. 그렇지 않으면 Elasticsearch가 내용을 토큰 화하고 여분의 버킷을 만들 수 있습니다. 따라서'name : "new york" '새로운 '과'요크 '를위한 두 개의 양동이를 보여줄 것입니다. –

관련 문제