使用弹性搜索过滤聚合数据1.7

时间:2017-09-01 20:23:50

标签: elasticsearch

假设我有一个帖子索引,其数据如下所示:

{
  "title": "Some Recipe",
  "book_id": 123,
  "content": "A list of ingredients",
  "tags": ["apple", "cinnamon", "honey"]
}

我希望有一个查询来检索以给定词组开头的所有标记以及包含该标记的帖子数。

到目前为止,我已尝试过以下方法:

{
  "size": 0,
  "query": {
    "bool": {
      "must": {
        "term": {
          "book_id": 123
        }
      }
    }
  },
  "aggs": {
    "tags": {
      "filter": { "prefix": { "tags": "app" } },
      "aggs":   {
        "tags" : { "terms": { "field": "tags" } }
      }
    }
  }
}

我相信它会返回所有文档中的所有标记以及标记以app开头的文档数。

是否可以撤回所有以app开头的标记,在本例中为apple,以及包含该标记的文档数量?

1 个答案:

答案 0 :(得分:0)

terms聚合允许您使用include设置filter the values条款。试试这个:

{
  "size": 0,
  "query": {
    "bool": {
      "must": {
        "term": {
          "book_id": 123
        }
      }
    }
  },
  "aggs": {
    "tags": {
      "filter": { "prefix": { "tags": "app" } },
      "aggs":   {
        "tags" : { 
          "terms": { 
            "field": "tags",
            "include": "app.*"            <--- add this
          } 
        }
      }
    }
  }
}