2017-04-14 6 views
1

나는 내가 지정한 기간 동안 도착 날짜가있는 모든 기간 (중첩 된) + 집을 제공하는 다음 쿼리를 사용합니다. 이제 특정 집에 도착하기 만하면되지만, Elasticsearch에서이를 수행하는 방법에 대한 구문을 이해할 수는 없습니다.특정 부모의 중첩 된 결과 찾기

GET /houses/house/_search 
{ 
    "_source" : ["HouseId"], 
"query": { 
"nested": { 
    "path": "Periods", 
    "query": { 
    "bool": { 
     "must": [ 
     {"range": { 
      "Periods.ArrivalDate": { 
      "gte" : "2017-10-01", 
      "lt" : "2017-11-01" 
     } 
     } 
     } 
    ] 
    } 
    }, 
"inner_hits" : {} 
} 

} }

매핑이이

{ 
"houses": { 
    "mappings": { 
    "house": { 
     "properties": { 
      "Periods": { 
       "type": "nested", 
       "properties": { 
       "ArrivalDate": { 
        "type": "date", 
        "format": "yyyy-MM-dd" 
       }, 

.... 
      "HouseId": { 
       "type": "keyword" 
      }, 

그래서 내가 어떤 HouseId와 함께 집에 사용할 수있는 arrivaldates을 찾을 싶습니다 (나는 관련 부품 희망에 단축)입니다 특정 달 안에

+0

당신은' "_source"과 같은 의미를 : { "include": "Period.ArrivalDate"}'? –

+0

아니, 결과를 한 집의 기간으로 제한하는 것은 아닙니다. 내 생각에 내 'inner_hits' 'hack'을 해결할 수있는 힌트는 있지만 내 질문은 아닙니다. 아이디어는 한 집에 사용할 수있는 기간을 나열 할 수 있다는 것입니다. 이미 사용 가능한 쿼리는 사용 가능한 집을 검색하는 데 사용됩니다. – Maarten

+0

'inner_hits'와'_source' 필터링은 두 가지 다른 것들입니다. "집"이란 무엇입니까? –

답변

0

내가 알아 낸 것 같지만, 더 나은 해결책을 사용할 수 있는지 알려 주시기 바랍니다 :

{ 
"_source":[ 
    "HouseCode", 
    "Country", 
    "Region" 
], 
"query":{ 
    "bool":{ 
    "must":[ 
     { 
      "match":{ 
       "HouseId":"someid" 
      } 
     }, 
     { 
      "nested":{ 
       "path":"Periods", 
       "query":{ 
       "range":{ 
        "Periods.ArrivalDate":{ 
         "gte":"2017-05-01", 
         "lt":"2017-06-01" 
        } 
       } 
       }, 
       "inner_hits":{ 
       "size":1000 
       } 
      } 
     } 
    ] 
    } 
} 
} 
관련 문제