limit filter 似乎可以满足您的需求。这是一个简单的例子。
我建立了一个简单的索引并给了它一些文档:
PUT /test_index
{
"settings": {
"number_of_shards": 1
}
}
POST /test_index/doc/_bulk
{"index":{"_id":1}}
{"name":"a a", "val": 1}
{"index":{"_id":2}}
{"name":"a b", "val": 2}
{"index":{"_id":3}}
{"name":"a c", "val": 3}
{"index":{"_id":4}}
{"name":"b a", "val": 4}
{"index":{"_id":5}}
{"name":"b b", "val": 5}
{"index":{"_id":6}}
{"name":"b c", "val": 6}
然后我可以得到前两个文档的"val"字段与包含术语"name"的"a"的总和,如下:
POST /test_index/_search
{
"query": {
"filtered": {
"query": {
"term": {
"name": {
"value": "b"
}
}
},
"filter": {
"limit": {
"value": 2
}
}
}
},
"aggs": {
"val_sum": {
"sum": {
"field": "val"
}
}
}
}
...
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.73895097,
"hits": [
{
"_index": "test_index",
"_type": "doc",
"_id": "2",
"_score": 0.73895097,
"_source": {
"name": "a b",
"val": 2
}
},
{
"_index": "test_index",
"_type": "doc",
"_id": "4",
"_score": 0.73895097,
"_source": {
"name": "b a",
"val": 4
}
}
]
},
"aggregations": {
"val_sum": {
"value": 6,
"value_as_string": "6.0"
}
}
}
这是我使用的代码:
http://sense.qbox.io/gist/6be3fc75db339fa3810521dbcb61429cd885d1bf