2017-04-14 18 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" : {} 
} 

} }

マッピングは、だから私は、特定のHouseIdと家のために利用可能なarrivaldatesを見つけたいと思い、この(私は関連する部分を願うに短縮)

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

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

です特定の月以内

+0

を:{"include": "Period.ArrivalDate"} '? –

+0

いいえ、私は1つの家の期間だけに結果を限定するつもりはありません。あなたのヒントは私の 'inner_hits' 'ハック'を解決するためにいいですが、私は思うが、私の質問ではない。アイデアは、ある家のために、利用可能な期間をリストすることができるということです。私がすでに持っている質問は、利用可能な家を検索するためのものです。 – Maarten

+0

'inner_hits'と' _source'フィルタリングは2つの異なるものです。 「家」とは何ですか? –

答えて

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 
       } 
      } 
     } 
    ] 
    } 
} 
} 
0

クエリはあなたに家全体を返します。

あなたが唯一のいくつかの期間を得るために弱々しい場合は、フィルターの集約と組み合わせて、ネストされた集計、使用する必要があります:あなたは ` "_source" のような何かを意味

関連する問題