ES 1.4.2 Value Count聚合返回incorret值 当我在查询下面运行以获取“durations”字段中数组元素的总数时,value_count aggr将获取唯一值的计数。
查询:
{
"query": {
"filtered": {
"query": {
"match": {
"sessions.applicationId": {
"query": 208,
"type": "boolean"
}
}
},
"filter": {
"and": {
"filters": [
{
"range": {
"eventDate": {
"from": 1388916360000,
"to": 1389402273384,
"include_lower": true,
"include_upper": true
}
}
}
]
}
}
}
},
"aggregations": {
"Session_Count": {
"value_count": {
"field": "durations"
}
}
}
}
结果点击
"hits": [
{
"_index": "users",
"_type": "sessions",
"_id": "18967_20140105_CF538C86DEBC432DBDE40887FE6CA051",
"_score": 1,
"_source": {
"eventDate": "2014-01-05T17:01:18",
"manufacturer": "apple",
"applicationId": "208",
"durations": [
2,
2
]
}
},
{
"_index": "users",
"_type": "sessions",
"_id": "2386_20140109_5AC476D2FC784826A3B3A6584578597E",
"_score": 1,
"_source": {
"eventDate": "2014-01-09T15:55:53",
"manufacturer": "apple",
"applicationId": "208",
"durations": [
1,
1
]
}
]
"aggregations": {
"Session_Count": {
"value": 2
}
}
在上述“durations”的value_count结果中,数组[2,2]和[1,1]将变为2.我希望它在ES参考文档中给出为4。 这些值对于不同的值是正确的,例如持续时间[1,2],[3],[3,2,4]它是6。
这是弹性搜索Value_count功能的问题还是我在这里遗漏了什么。
任何人都可以告诉我这件事。
答案 0 :(得分:0)
value_count为您提供唯一值的数量,而不是值的总数。
要获取值的总数,您需要使用以下 -
将持续时间声明为多字段,并添加名为totalTokens的字段,类型为token_count。 链接 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html#token_count
这里发生的是,每个文档都会创建一个名为durations.totalTokens的附加字段,该字段具有该字段的标记数。 现在应用该字段的总和聚合以获得正确的答案。
{
"query": {
"filtered": {
"query": {
"match": {
"sessions.applicationId": {
"query": 208,
"type": "boolean"
}
}
},
"filter": {
"and": {
"filters": [
{
"range": {
"eventDate": {
"from": 1388916360000,
"to": 1389402273384,
"include_lower": true,
"include_upper": true
}
}
}
]
}
}
}
},
"aggregations": {
"Session_Count": {
"sum": {
"field": "duration.totalTokens"
}
}
}
}
答案 1 :(得分:0)
在这里具体来说,聚合总是返回各个桶的计数。这就是为什么它返回个别持续时间的计数而不是完整的结果。