2015-01-23 4 views
2

탄성 검색을 사용하여 mongoDb 컬렉션의 색인을 생성하는 매핑을 만들었습니다. 여기에 mapping 호텔입니다 : subLocality1, subLocality2, subLocality3, city :탄성 검색 - 여러 필드의 고유 한 요소

"properties" : { 
      "address_components" : { 
      "properties" : { 
       "_id" : { 
       "type" : "string" 
       }, 
       "subLocality1" : { 
       "type" : "string", 
       "index" : "not_analyzed" 
       }, 
       "subLocality2" : { 
       "type" : "string", 
       "index" : "not_analyzed" 
       }, 
       "subLocality3" : { 
       "type" : "string", 
       "index" : "not_analyzed" 
       }, 
      "city" : { 
       "type" : "string", 
       "index" : "not_analyzed" 
       } 
      } 

지금, 나는이 분야의 전체 고유 항목을 검색합니다. 또한 distinct 값의 각각은 q을 하위 문자열로 포함해야합니다. 고유 항목에는 해당하는 city 값이 포함되어야합니다.

예 : 상기 인덱스

"address_components" : { 
    "subLocality1" : "s1" 
    "subLocality2" : "s1", 
    "subLocality3" : "s2", 
    "city":"a" 
    } 

"address_components" : { 
    "subLocality1" : "s3" 
    "subLocality2" : "s1", 
    "subLocality3" : "s2", 
    "city":"a" 
    } 

"address_components" : { 
    "subLocality1" : "s2" 
    "subLocality2" : "s1", 
    "subLocality3" : "s4", 
    "city":"a" 
    } 

는 예상 결과는 다음

"address_components" : { 
    "subLocality1" : "s1" 
    "subLocality2" : "s1", 
    "subLocality3" : "s2", 
    "city":"ct1" 
    } 

"address_components" : { 
    "subLocality1" : "s3" 
    "subLocality2" : "s1", 
    "subLocality3" : "s2", 
    "city":"ct1" 
    } 

"address_components" : { 
    "subLocality1" : "s2" 
    "subLocality2" : "s1", 
    "subLocality3" : "s4", 
    "city":"ct1" 
    } 
{s1, a}, {s2,a}, {s3,a}, {s4,a},{a,a} 

I 탄성 검색을 terms 응집을 사용하여 고 시도했다.

GET /rescu/rescu/_search?pretty=true&search_type=count 

{ 
    "aggs" : { 
     "distinct_locations" : { 
      "terms" : { 
       "script" : "doc['address_components.subLocality1'].value" 
      } 
     } 
    } 
} 

그러나 terms 집계는 link을 다음에 따라 하나의 필드에 적용됩니다.

답변

0

탄성 검색 api 문서를 살펴본 후 직접 답을 찾았습니다. 스크립트를 사용하여 여러 필드에서 용어를 검색해야합니다. ?

GET/rescu/rescu/_search 꽤 = 진정한 & 검색 _는 = 두 개의 필드로

{ 
    "aggs": { 
    "distinct_locations": { 
     "terms": { 
     "script": "[doc['address_components.subLocality1'].value,doc['address_components.subLocality2'].value,doc['address_components.subLocality3'].value]", 
     "size": 5000 
     } 
    } 
    } 
} 
0
다음

예를 카운트 : 국가를,시. 국가 별 집계 및 도시 별 하위 집계를 사용합니다.

{ 
    "size": 0, 
    "aggs": { 
    "country": { 
     "terms": { 
     "field": "country" 
     }, 
     "aggregations": { 
     "city": { 
      "terms": { 
      "field": "city" 
      } 
     } 
     } 
    } 
    } 
} 

하위 집계의 여러 계층을 사용할 수 있습니다.