1

我的示例文档如下所示。

{
    "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"]这样我就不会得到整个文档,而只是user

相反,我想要的是所有独特的不同用户的列表。而不是所有可能具有user重复字段的文档。

像下面这样的聚合

{
    "aggs": {
        "unique_users": {
            "terms": {
                "field": "user"
            }
        }
    }
}

聚合所有文档,而不是我想要对满足任何查询的文档进行聚合。我觉得我错过了一个简单的事情,比如在我的聚合中定义我的查询。但我不知道它是什么。

4

1 回答 1

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"
      }
    }
  }
}
于 2014-11-28T10:25:09.897 回答