2017-09-01 81 views
0

假设我有一个帖子指数,其数据看起来是这样的:筛选汇总数据使用弹性搜索1.7

{ 
    "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)以及具有该标签的文档数量?

回答

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 
      } 
     } 
     } 
    } 
    } 
}