2016-09-14 5 views
0

페이지에 방문 기록이있는 색인이 있습니다. 페이지를 방문하여 각 사용자가 선으로 기록됩니다 내가 가장 본 페이지 countryCode와에 의해 로그에탄성 검색 집계가 작동하지 않습니다.

POST 요청을 얻으려고

{ 
    "_index": "logs", 
    "_type": "visit", 
    "_id": "AVco3MoAdMBqjXxJcqfF", 
    "_version": 1, 
    "_score": 1, 
    "_source": { 
     "@version": "1", 
     "@timestamp": "2016-09-14T13:22:20.074Z", 
     "user": "309424", 
     "page": "15399", 
     "countryCode": "FR" 
    } 
} 

/방문/_search 검색 _ = 수 :?

{ 
    "aggs":{ 
     "pages":{ 
      "terms":{ 
       "field":"page" 
      } 
     } 
    }, 
    "query":{ 
     "bool":{ 
      "must":[ 
       { 
        "term":{ 
         "countryCode":{ 
          "value":"FR", 
          "boost":1 
         } 
        } 
       } 
      ] 
     } 
    } 
} 

그러나 응답 배열 "버킷"은 비어 있습니다. "countryCode"대신 "user"를 사용하여 쿼리를 수행하는 경우 지정된 사용자가 가장 많이 본 페이지에서 좋은 결과를 얻습니다. 하지만 나라별로 필요합니다.

내 countryCode 필드와 내 사용자 필드의 차이점은 무엇입니까? 모두

"countryCode": { 
    "type": "string" 
}, 
"user": { 
    "type": "string" 
} 

답변

1

귀하의 countryCode 필드가 분석 문자열이 너무 쿼리이 대신 같이 할 필요가있다 문자열로 선언

{ 
    "aggs":{ 
     "pages":{ 
      "terms":{ 
       "field":"page" 
      } 
     } 
    }, 
    "query":{ 
     "bool":{ 
      "must":[ 
       { 
        "term":{ 
         "countryCode":{ 
          "value":"fr",  <--- lowercase fr here 
          "boost":1 
         } 
        } 
       } 
      ] 
     } 
    } 
} 

하거나 대문자 FR을 유지하고 대신

match 쿼리를 사용할 수 있습니다
{ 
    "aggs":{ 
     "pages":{ 
      "terms":{ 
       "field":"page" 
      } 
     } 
    }, 
    "query":{ 
     "bool":{ 
      "must":[ 
       { 
        "match":{    <--- use match 
         "countryCode":{ 
          "value":"FR", 
          "boost":1 
         } 
        } 
       } 
      ] 
     } 
    } 
} 
+0

고마워요! "match": { "countryCode": "FR"} 완벽하게 작동합니다. – Bouffe

+0

도움이 되니 기쁩니다! – Val