2016-12-26 1 views
1

검색 결과가 뚜렷한 문제를 해결하려고합니다.Elasticsearch에서 고유 한 값을 반환하십시오.

{ 
     "name" : "ABC", 
     "favorite_cars" : [ "ferrari","toyota" ] 
     }, { 
     "name" : "ABC", 
     "favorite_cars" : [ "ferrari","toyota" ] 
     }, { 
     "name" : "GEORGE", 
     "favorite_cars" : [ "honda","Hyundae" ] 
     } 

내가 좋아하는 자동차의 용어 쿼리 " 페라리"를 수행합니다. 나는 ABC 인 두 개의 결과를 얻습니다. 간단히 말해서 반환 된 결과가이 경우 하나가되어야합니다. 따라서 하나의 1 개의 결과를 받기 위해 이름 필드에 별명을 적용 할 수 있다면 내 요구 사항이 적용됩니다. 당신은거야

{ 
    "size": 0, 
    "query": { 
    "term": { 
     "favorite_cars": "ferrari" 
    } 
    }, 
    "aggs": { 
    "names": { 
     "terms": { 
     "field": "name" 
     }, 
     "aggs": { 
     "single_result": { 
      "top_hits": { 
      "size": 1 
      } 
     } 
     } 
    } 
    } 
} 

그 방법 : 당신이 원하는 것을 달성하기 위해

감사

+0

제가 아는 한, 당신은 이것을 할 수 없습니다. 당신이 할 수있는 대부분은 용어 집계를 사용하여 그것들을 세는 것입니다. 필자의 경우, 자바 세트를 사용한 후에 자바 스크립트를 제거해야한다. 방법을 찾으면 알려주세요. – Yeikel

+1

@Yeikel Val에서 제공하는 솔루션이 유용합니다. 그것은 당신에게 도움이됩니까? –

답변

1

한 가지 방법은 다음과 같이 크기가 1 다음 top_hits sub-aggregationname 필드에 terms 집계를 사용하는 것입니다 단 하나의 용어를 얻고 ABC을 입력 한 다음 하나의 일치하는 문서를 중첩시킵니다.

+0

정말 도움이 된 @Val 감사합니다. –

+0

쿨, 도움이 기쁘다! – Val

+0

@Val이 집계가 얼마나 비쌉니까? – Yeikel

관련 문제