gpt4 book ai didi

javascript - 在 kibana3/elastic.js 中合并两个过滤器

转载 作者:行者123 更新时间:2023-11-28 07:34:22 25 4
gpt4 key购买 nike

我在 Kibana3 的自定义面板中有两个过滤器:

 request = request.query(
$scope.ejs.FilteredQuery(
boolQuery,
filterSrv.getBoolFilter(filterSrv.ids()) // has to be merged with BoolFilter2
))
.size($scope.panel.size);

这适用于两个过滤器中的任何一个,但我想使用两个对象进行过滤,但我不知道如何合并它们。有人可以帮忙吗?

最佳答案

Kibana 3 过滤器可以设置为“任一”模式,而不是“必须”。

这会转化为如下所示的过滤器:

{
"filter": {
"bool": {
"should": [
{
"fquery": {
"query": {
"query_string": {
"query": "test1"
}
},
"_cache": true
}
},
{
"fquery": {
"query": {
"query_string": {
"query": "test2"
}
},
"_cache": true
}
}
]
}
}
}

下面是 Kibana 3 中处理该问题的 filterSrv 代码:https://github.com/elasticsearch/kibana/blob/3.0/src/app/services/filterSrv.js#L144

this.getBoolFilter = function(ids) {
var bool = ejs.BoolFilter();
// there is no way to introspect the BoolFilter and find out if it has a filter. We must keep note.
var added_a_filter = false;

_.each(ids,function(id) {
if(dashboard.current.services.filter.list[id].active) {
added_a_filter = true;

switch(dashboard.current.services.filter.list[id].mandate)
{
case 'mustNot':
bool.mustNot(self.getEjsObj(id));
break;
case 'either':
bool.should(self.getEjsObj(id));
break;
default:
bool.must(self.getEjsObj(id));
}
}
});
// add a match filter so we'd get some data
if (!added_a_filter) {
bool.must(ejs.MatchAllFilter());
}
return bool;
};

this.getEjsObj = function(id) {
return self.toEjsObj(dashboard.current.services.filter.list[id]);
};

您可以修改该函数以采用可选参数来将任务设置为其中之一。

关于javascript - 在 kibana3/elastic.js 中合并两个过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28764235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com