elasticsearch Elasticsearch-添加单独的聚合查询
下面是elasticsearch查询,我使用它从聚合中获取结果和结果的过滤器选项。问题在于,每当有人应用过滤器时,总体结果都会发生变化,因此过滤器选项也会发生变化。除非查询参数更改,否则我不希望过滤器选项更改。现在我要打两个电话:
elasticsearch Elasticsearch-添加单独的聚合查询,
elasticsearch,
elasticsearch,下面是elasticsearch查询,我使用它从聚合中获取结果和结果的过滤器选项。问题在于,每当有人应用过滤器时,总体结果都会发生变化,因此过滤器选项也会发生变化。除非查询参数更改,否则我不希望过滤器选项更改。现在我要打两个电话: 无需聚合即可获得所有结果 通过使用聚合并将size参数设置为0来获取所有筛选器 这种方法使用2个api请求,因此时间增加了一倍。这只能在一个请求中完成吗 第一次调用:没有聚合的所有结果 { "query": { "bool": { "shoul
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"title": {
"query": "cooking",
"boost": 2,
"slop": 10
}
}
},
{
"match": {
"title": {
"query": "cooking",
"boost": 1
}
}
}
],
"minimum_should_match": 1,
"filter": [
{
"match": {
"is_paid": false
}
}
]
}
},
"sort": [],
"from": 0,
"size": 15
}
第二次呼叫:获取筛选器
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"title": {
"query": "cooking",
"boost": 2,
"slop": 10
}
}
},
{
"match": {
"title": {
"query": "cooking",
"boost": 1
}
}
}
],
"minimum_should_match": 1
}
},
"size": 0,
"aggs": {
"courseCount": {
"terms": {
"field": "provider",
"size": 100
}
},
"paidCount": {
"terms": {
"field": "is_paid",
"size": 3
}
},
"subjectCount": {
"terms": {
"field": "subject",
"size": 30
}
},
"levelCount": {
"terms": {
"field": "level",
"size": 4
}
},
"pacingCount": {
"terms": {
"field": "pacing_type",
"size": 4
}
}
}
}
如果您不关心第二次查询中的过滤器,您可以将
size
设置为非零,这将使您的命中率
与第一次查询类似。在这种情况下,我将无法过滤查询。如果我添加过滤器,聚合也会产生影响。您可以在聚合中添加过滤器我需要在主查询中使用过滤器,否则用户将无法筛选数千条记录。在聚合查询中再次添加筛选器将筛选筛选结果。如果我再次只在聚合查询中保留过滤器,用户将无法过滤结果。添加全局聚合也没有帮助,因为它包含所有文档。