如何在Elasticsearch中获取满足特定查询的所有不同字段值?

时间:2014-11-28 10:14:28

标签: elasticsearch aggregation pyelasticsearch

我的示例文档如下所示。

{
    "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

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

1 个答案:

答案 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"
      }
    }
  }
}