我的页面上有访问日志的索引。每个用户访问页面都会记录一行:
{
"_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 = count:
{
"aggs":{
"pages":{
"terms":{
"field":"page"
}
}
},
"query":{
"bool":{
"must":[
{
"term":{
"countryCode":{
"value":"FR",
"boost":1
}
}
}
]
}
}
}
但响应阵列"桶"是空的。而当我使用" user"进行查询时而不是" countryCode",我通过我指定的用户查看了大多数已查看页面的结果。但我需要按国家划分。
我的countryCode字段和用户字段之间的区别是什么?两者都声明为字符串
"countryCode": {
"type": "string"
},
"user": {
"type": "string"
}
答案 0 :(得分: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
}
}
}
]
}
}
}