0
示例:存储在索引中的文档表示关于每个测试的测试分数和元数据。查询或筛选最小字段值?
{ "test": 1, "user":1, "score":100, "meta":"other data" },
{ "test": 2, "user":2, "score":65, "meta":"other data" },
{ "test": 3, "user":2, "score":88, "meta":"other data" },
{ "test": 4, "user":1, "score":23, "meta":"other data" }
我需要能够过滤掉所有,但最低的测试成绩,并与测试每个考生返回相关的元数据。所以我预期的结果集将是:
{ "test": 2, "user":2, "score":65, "meta":"other data" },
{ "test": 4, "user":1, "score":23, "meta":"other data" }
唯一的办法,我看要做到这一点,现在是第一次做一个条款聚集用户使用嵌套分钟聚合得到他们的最低得分。
POST user/tests/_search
{
"aggs" : {
"users" : {
"terms" : {
"field" : "user",
"order" : { "lowest_score" : "asc" }
},
"aggs" : {
"lowest_score" : { "min" : { "field" : "score" } }
}
}
},"size":0
}
然后,我不得不采取查询的结果,并为每个用户做一个过滤查询和最低得分值过滤抢到元数据的其余部分。育。
POST user/tests/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{"term": { "user": {"value": "1" }}},
{"term": { "score": {"value": "22" }}}
]
}
}
}
}
}
我想知道是否有返回具有最低的测试得分为每个考生和包括原始文件_source回一个响应的方式。
解决方案?
更新 - 解决
下面给我的得分最低文件为每个用户,并通过总体最低分数排序。并且,它包含原始文档。
GET user/tests/_search?search_type=count
{
"aggs": {
"users": {
"terms": {
"field": "user",
"order" : { "lowest_score" : "asc" }
},
"aggs": {
"lowest_score": { "min": { "field": "score" }},
"lowest_score_top_hits": {
"top_hits": {
"size":1,
"sort": [{"score": {"order": "asc"}}]
}
}
}
}
}
}
完美。我错过了top_hits的价值!我发现这在寻找最终修复方面很有用。我将用解决方案更新上面的帖子。谢谢! – hubbardr 2014-12-11 21:35:20