在elasticsearch中按计数过滤

时间:2015-02-27 09:56:11

标签: elasticsearch aggregate-functions aggregate

考虑以下数据

POST programming/languages/1
{
  "name":"java",
  "type":"general_purpose"
}
POST programming/languages/2
{
  "name":"javascript",
  "type":"scripting"
}
POST programming/languages/3
{
  "name":"c",
  "type":"general_purpose"
}

GET programming/languages/_search
{
  "query": {
   "match": {
    "type":"general_purpose"
   }
  }
}

如果我需要查找具有多个匹配字段type的文档,那么在elasticsearch中该怎么做?

通常使用group byhaving子句,我们可以在SQL中实现这一点。 我们能在弹性搜索中实现这一目标吗?

1 个答案:

答案 0 :(得分:3)

您好,您可以使用top_hits查询,它不适合您希望找到一个术语的大量文档的情况。在你自己的情况下尝试它。但我认为这个查询可以找到你想要的东西。

GET /programming/languages/_search?search_type=count
{
  "aggs": {
    "byTop": {
      "terms": {
        "field": "type",
        "min_doc_count": 2,
        "size": 10
      },
      "aggs": {
        "theTop": {
          "top_hits": {
            "size":5
          }
        }
      }
    }
  }
}