Elasticsearch - 部分 bool 查询的聚合
Elasticsearch - Aggregations on part of bool query
假设我有这个 bool 查询:
"bool" : {
"should" : [
{ "term" : { "FirstName" : "Sandra" } },
{ "term" : { "LastName" : "Jones" } }
],
"minimum_should_match" : 1
}
意思是我想匹配名字为 Sandra 或姓氏为 Jones 的所有人。
现在,有什么方法可以对仅匹配第一个词的所有文档执行聚合?
例如,我想获取任何名为 Sandra 的人所拥有的 "Prizes" 的所有唯一值。通常我会这样做:
"query": {
"match": {
"FirstName": "Sandra"
}
},
"aggs": {
"Prizes": {
"terms": {
"field": "Prizes"
}
}
}
有什么方法可以将两者结合起来,所以我只需要执行一个查询 returns 所有名字为 Sandra 或姓氏为 Jones 的人,并且只对名字为第一个的人进行聚合桑德拉的名字?
非常感谢!
使用post_filter。
请参考以下查询。 Post_filter 将确保您的 bool should 子句不会影响您的聚合范围。
聚合也会根据主查询进行过滤,但它们不受 post_filter 的影响。请参考 link
{
"from": 0,
"size": 20,
"aggs": {
"filtered_lastname": {
"filter": {
"query": {
"match": {
"FirstName": "sandra"
}
}
},
"aggs": {
"prizes": {
"terms": {
"field": "Prizes",
"size": 10
}
}
}
}
},
"post_filter": {
"bool": {
"should": [{
"term": {
"FirstName": "Sandra"
}
}, {
"term": {
"LastName": "Jones"
}
}],
"minimum_should_match": 1
}
}
}
运行 在汇总奖品之前在 aggs 中进行过滤器可以帮助您实现所需的用例。
谢谢
希望这有帮助
假设我有这个 bool 查询:
"bool" : {
"should" : [
{ "term" : { "FirstName" : "Sandra" } },
{ "term" : { "LastName" : "Jones" } }
],
"minimum_should_match" : 1
}
意思是我想匹配名字为 Sandra 或姓氏为 Jones 的所有人。
现在,有什么方法可以对仅匹配第一个词的所有文档执行聚合?
例如,我想获取任何名为 Sandra 的人所拥有的 "Prizes" 的所有唯一值。通常我会这样做:
"query": {
"match": {
"FirstName": "Sandra"
}
},
"aggs": {
"Prizes": {
"terms": {
"field": "Prizes"
}
}
}
有什么方法可以将两者结合起来,所以我只需要执行一个查询 returns 所有名字为 Sandra 或姓氏为 Jones 的人,并且只对名字为第一个的人进行聚合桑德拉的名字?
非常感谢!
使用post_filter。 请参考以下查询。 Post_filter 将确保您的 bool should 子句不会影响您的聚合范围。
聚合也会根据主查询进行过滤,但它们不受 post_filter 的影响。请参考 link
{
"from": 0,
"size": 20,
"aggs": {
"filtered_lastname": {
"filter": {
"query": {
"match": {
"FirstName": "sandra"
}
}
},
"aggs": {
"prizes": {
"terms": {
"field": "Prizes",
"size": 10
}
}
}
}
},
"post_filter": {
"bool": {
"should": [{
"term": {
"FirstName": "Sandra"
}
}, {
"term": {
"LastName": "Jones"
}
}],
"minimum_should_match": 1
}
}
}
运行 在汇总奖品之前在 aggs 中进行过滤器可以帮助您实现所需的用例。
谢谢 希望这有帮助