我的示例文档如下所示。
{
"user": "dslfjd",
"productLength": 68,
"productPrice": 4500,
"action": "Made Purchse"
}
我想让所有带来价格在4000到10000之间且长度在50到100之间的产品的用户。以下查询返回满足上述条件的所有文档。
{
"query": {
"bool": {
"must": [
{
"term": {
"act": "Made Purchase"
}
},
{
"range": {
"productPrice": {
"gte": 4000,
"lte": 10000
}
}
},
{
"range": {
"length": {
"gte": 50,
"lte": 100
}
}
}
]
}
}
}
在这里,我将获得满足上述查询条款的所有文档,我甚至可以通过指定"_source" = ["user"]
来预测我的响应,这样我就不会获得整个文档而只是{{1} }
相反,我想要的是所有独特的不同用户的列表。而不是所有可能重复user
字段的文档。
如下所示的汇总
user
聚合所有文档,而不是我希望聚合满足任何查询的文档。我觉得我错过了一个简单的事情,比如在我的聚合中定义我的查询。但我不知道它是什么。
答案 0 :(得分:2)
这太简单了,或者你需要的东西来自你所描述的:
GET /some_index/some_type/_search?search_type=count
{
"query": {
"bool": {
"must": [
{
"term": {
"action": "Made Purchase"
}
},
{
"range": {
"productPrice": {
"gte": 4000,
"lte": 10000
}
}
},
{
"range": {
"productLength": {
"gte": 50,
"lte": 100
}
}
}
]
}
},
"aggs": {
"unique_users": {
"terms": {
"field": "user"
}
}
}
}