2017-03-01 7 views
0

탄성 검색 2.4에서 일부 데이터를 필터링하고 싶습니다. 더 구체적으로 말하자면, 'island'레이블 아래에있는 레코드 만 고려하고 싶습니다.
이 같은 필터링 경우탄성 검색에서 분기를 필터링하십시오.

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" : {} 
     } 
     } 
    } 
    } 
}