ElasticSearch 按列表字段中的属性聚合
ElasticSearch Aggregate by attribute in field which is list
我有一些文章,每篇文章可能有一些审稿人,每个审稿人可能有不同的批准状态,如下所示:
{
ArticleId: 1,
Title: "1",
Reviewers: [
{
"Reviewer": "abc",
"Status": "Pending"
},
{
"Reviewer": "def",
"Status": "Approved"
}
]
}
{
ArticleId: 2,
Title: "2",
Reviewers: [
{
"Reviewer": "abc",
"Status": "Approved"
},
{
"Reviewer": "def",
"Status": "Approved"
}
]
}
{
ArticleId: 3,
Title: "2",
Reviewers: [
{
"Reviewer": "def",
"Status": "Approved"
}
]
}
我想把这个数据保存在ES里,搜索所有审稿人是abc的文章,按abc的审稿状态汇总。
{
...
buckets:[{
"doc_count": "1",
"Key": "Pending"
},{
"doc_count": "1",
"Key": "Approved"
}]
}
我想知道如何在 ES 中做到这一点?
假设:评论者是嵌套类型。
试试下面的查询。详细信息在代码中作为注释。
{
"size": 0,
"aggs": {
"NAME": {
"nested": { // <========== Use nested aggregation
"path": "Reviewers"
},
"aggs": {
"NAME": {
"filter": {
"term": {
"Reviewers.Reviewer.keyword": "abc" // <========= Filter docs with reviewer = abc
}
},
"aggs": {
"NAME": {
"terms": {
"field": "Reviewers.Status.keyword", // <======= aggregate based on reviewer status
"size": 10
}
}
}
}
}
}
}
}
我有一些文章,每篇文章可能有一些审稿人,每个审稿人可能有不同的批准状态,如下所示:
{
ArticleId: 1,
Title: "1",
Reviewers: [
{
"Reviewer": "abc",
"Status": "Pending"
},
{
"Reviewer": "def",
"Status": "Approved"
}
]
}
{
ArticleId: 2,
Title: "2",
Reviewers: [
{
"Reviewer": "abc",
"Status": "Approved"
},
{
"Reviewer": "def",
"Status": "Approved"
}
]
}
{
ArticleId: 3,
Title: "2",
Reviewers: [
{
"Reviewer": "def",
"Status": "Approved"
}
]
}
我想把这个数据保存在ES里,搜索所有审稿人是abc的文章,按abc的审稿状态汇总。
{
...
buckets:[{
"doc_count": "1",
"Key": "Pending"
},{
"doc_count": "1",
"Key": "Approved"
}]
}
我想知道如何在 ES 中做到这一点?
假设:评论者是嵌套类型。
试试下面的查询。详细信息在代码中作为注释。
{
"size": 0,
"aggs": {
"NAME": {
"nested": { // <========== Use nested aggregation
"path": "Reviewers"
},
"aggs": {
"NAME": {
"filter": {
"term": {
"Reviewers.Reviewer.keyword": "abc" // <========= Filter docs with reviewer = abc
}
},
"aggs": {
"NAME": {
"terms": {
"field": "Reviewers.Status.keyword", // <======= aggregate based on reviewer status
"size": 10
}
}
}
}
}
}
}
}