我试图根据查询和过滤器来确定范围。我能够做到以下几点:
以下是1的示例:
{
'colors' => {
global: {},
aggs: {
results: {
filter: {
bool: {
must: my_filters_without_this_filter(filter_to_ignore),
},
},
aggs: {
results: {
terms: {
field: 'color',
size: 10,
},
},
},
},
},
},
}
问题是我无法使用上述内容指定聚合的搜索字符串。
我的另一个选择就是继承整个查询,但我无法删除过滤器:
{
"aggs": {
"colors": {
"filter": {
"bool": {
"must": [, {
"terms": {
"colors": ["red", "white", "blue", "green"]
}
}]
}
},
"aggs": {
"results": {
"terms": {
"field": "colors",
"size": 10
}
}
}
},
},
"query": {
"bool": {
"must": {
"function_score": {
"boost_mode": "replace",
"functions": [{
"script_score": {
"script": "my_script"
}
}],
"query": {
"multi_match": {
"query": "",
"type": "cross_fields",
"fields": ["name^6", "description", "barcode^2"],
"operator": "and",
"zero_terms_query": "all"
}
}
}
},
"filter": {
"bool": {
"must": [{
"terms": {
"colors": ["red"]
}
}]
}
}
}
}
}
在上面的查询中,我想忽略指定的过滤器(红色)以进行聚合。
是否可以使用全局范围的聚合,还可以指定过滤器和查询?
我更愿意不为每个请求制作2个弹性搜索查询,但看起来我可能需要这样做。
答案 0 :(得分:0)
使用post_filter解决,以便在最终过滤器之前构建聚合。