2016-09-14 159 views
0

我有一個帶有訪問日誌頁面的索引。每個用戶瀏覽的網頁登錄用線:Elasticsearch聚合不起作用

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

我試圖通過COUNTRYCODE中,最常瀏覽的網頁得到原木

POST請求/瀏覽/ _search SEARCH_TYPE =算:

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

但響應數組「桶」是空的。而當我用「user」而不是「countryCode」進行查詢時,我得到了我指定的用戶瀏覽量最高的頁面的好結果。但我需要國家。

我的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

謝謝! 「匹配」:{「countryCode」:「FR」}完美的作品:) – Bouffe

+0

很高興幫助! – Val