我有一个jbpm用户任务的索引。每个用户任务都有 id
, actualOwner
以及 actualOwner.keyword
, potentialOwners
以及 potentialOwners.keyword
,和 processId
领域。
我需要这个聚合:某个用户的每个进程的用户任务数。如果用户任务是 actualOwner
或者 potentialOwner
就是那个用户。在某些状态下。
这似乎很简单,但我写不出来。我试试这个:
POST jbpm-tasks/_search?size=1000
{
"query": {
"bool": {
"should": [
{
"term": {
"actualOwner.keyword": {
"value": "vasya"
}
}
},
{
"term": {
"potentialOwners.keyword": {
"value": "vasya"
}
}
}
],
"must": [
{
"terms": {
"status.keyword": [
"Created",
"Reserved",
"InProgress",
"Ready"
]
}
}
]
}
},
"aggs": {
"byProcesses": {
"terms": { "field": "processId.keyword", "size": 1000000 }
}
}
}
据我所知,查询不过滤,它只计算分数。所以,对于这个查询真的不管用户登录,对于 vasya
还有。例如, fedya
请求返回相同的聚合结果(任务的分数不同,但现在不感兴趣)。
我不明白如何为多个过滤器编写过滤器聚合 OR
以及 AND
公式。在所有的例子中总是一个领域。。。
如何正确编写此查询?
2条答案
按热度按时间fnvucqvd1#
你用哪个版本?不同的版本有不同的语法。
你说得对,
minimum_should_match=1
就是这样。如果bool查询不包含must或filter子句,则默认minimum_should_match
值为1时,查询的行为与您最初理解的一样。否则,默认
minimum_should_match
值为0,表示should
与…不同的条款OR
,should
子句不过滤任何文档。xzlaal3s2#
如果您不需要按相关性得分对数据进行排序,那么最好使用
filter
. 此外,如果您只需要使用聚合部分的数据,那么设置size:0
使elasticsearch不返回任何帖子,只返回aggs结果。在我看来,以下查询可以为您提供更好的性能:总的来说,将大量数据设置为聚合的大小会使其非常繁重。如果您想查看所有来自聚合的数据,那么使用复合聚合链接将是一个不错的选择。