2017-03-01 96 views
0

我想在彈性搜索中過濾一些數據2.4。 更具體地說,我只想考慮「島」標籤下的記錄。
如果我篩選這樣的:在彈性搜索中濾除分支

filter : [{term: {Artists.Artist.Records.label : "Island"}}] 

我會失去萬里,但保留兩個人,因爲他們有一個島嶼的標籤。這很好,但我想失去所有無記錄島,但仍保留頂部的所有數據。

所以給出:

{ 
    "Artists": [ 
    { 
     "Artist": "Tom Waits", 
     "Records": [ 
     { 
      "id": 1, 
      "title": "Rain dogs", 
      "label": "Island" 
     }, 
     { 
      "id": 2, 
      "title": "SwordFishTrombones", 
      "label": "Island" 
     }, 
     { 
      "id": 3, 
      "title": "Bone Machine", 
      "label": "ANTI" 
     } 
     ] 
    }, 
    { 
     "Artist": "dEUS", 
     "Records": [ 
     { 
      "id": 112, 
      "title": "Worst Case Scenario", 
      "label": "Island" 
     }, 
     { 
      "id": 2213, 
      "title": "Keep you close", 
      "label": "Universal" 
     } 
     ] 
    }, 
    { 
     "Artist": "Miles", 
     "Records": [ 
     { 
      "id": 42, 
      "title": "Kind of blue", 
      "label": "columbia" 
     } 
     ] 
    } 
    ] 
} 

我想直到結束:

{ 
    "Artists": [ 
    { 
     "Artist": "Tom Waits", 
     "Records": [ 
     { 
      "id": 1, 
      "title": "Rain dogs", 
      "label": "Island" 
     }, 
     { 
      "id": 2, 
      "title": "SwordFishTrombones", 
      "label": "Island" 
     } 
     ] 
    }, 
    { 
     "Artist": "dEUS", 
     "Records": [ 
     { 
      "id": 112, 
      "title": "Worst Case Scenario", 
      "label": "Island" 
     } 
     ] 
    } 
    ] 
} 

這可能嗎?謝謝!

回答

1

我相信這可以通過內部命中功能來實現。您的查詢會顯示如下:

{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
     "nested": { 
      "path": "Artists.Artist.Records", 
      "filter": { 
      "term": { 
       "Records.label": "Island" 
      } 
      }, 
      "inner_hits" : {} 
     } 
     } 
    } 
    } 
}