使用 SqlPredicate 聚合时出现 Hazelcast 错误
Hazelcast error when aggregating using SqlPredicate
我正在尝试使用 SqlPredicate 谓词在 Hazelcast 中的地图上执行搜索和聚合。当像下面这样搜索时,SqlPredicate 工作得很好:
imap = //get map from Hazelcast
Collection c = imap.values(new SqlPredicate("field=value"));
但是,如果我尝试进行以下聚合,我会得到一个 ClassCastException:
imap = //get map from Hazelcast
PropertyExtractor<-,-> pe = x -> x.getValue();
SqlPredicate p = new SqlPredicate("field=value");
Supplier<-,-,-> s = Supplier.fromPredicate(p, Supplier.all(pe));
int x = imap.aggregate(s, Aggregations.integerMax());
我还尝试创建自己的自定义谓词,它是 SqlPredicate 的包装器:
public static MyPredicate implements Predicate<-,-> {
private SqlPredicate pred;
public MyPredicate(String s){
pred = new SqlPredicate(s);
}
@Override
public boolean apply(Entry<-,-> arg0){
return pred.apply(arg0);
}
}
这会导致 NullPointerException 并且永远不会到达 apply() 方法。
这是 Hazelcast 中的错误吗?还是不能使用 SqlPredicate 来创建供应商? SqlPredicate 实现了 Predicate 接口,所以我认为它应该可以工作。
我目前在搜索时使用 SqlPredicate,所以我希望在聚合时能够使用相同的谓词进行过滤。
聚合内目前不支持 SqlPredicates(和 Predicates / PredicateBuilder 谓词)。但是,您可以为此类简单调用实现自己的 Predicate。据我所知,我想它会在 3.6 中修复。
我正在尝试使用 SqlPredicate 谓词在 Hazelcast 中的地图上执行搜索和聚合。当像下面这样搜索时,SqlPredicate 工作得很好:
imap = //get map from Hazelcast
Collection c = imap.values(new SqlPredicate("field=value"));
但是,如果我尝试进行以下聚合,我会得到一个 ClassCastException:
imap = //get map from Hazelcast
PropertyExtractor<-,-> pe = x -> x.getValue();
SqlPredicate p = new SqlPredicate("field=value");
Supplier<-,-,-> s = Supplier.fromPredicate(p, Supplier.all(pe));
int x = imap.aggregate(s, Aggregations.integerMax());
我还尝试创建自己的自定义谓词,它是 SqlPredicate 的包装器:
public static MyPredicate implements Predicate<-,-> {
private SqlPredicate pred;
public MyPredicate(String s){
pred = new SqlPredicate(s);
}
@Override
public boolean apply(Entry<-,-> arg0){
return pred.apply(arg0);
}
}
这会导致 NullPointerException 并且永远不会到达 apply() 方法。
这是 Hazelcast 中的错误吗?还是不能使用 SqlPredicate 来创建供应商? SqlPredicate 实现了 Predicate 接口,所以我认为它应该可以工作。
我目前在搜索时使用 SqlPredicate,所以我希望在聚合时能够使用相同的谓词进行过滤。
聚合内目前不支持 SqlPredicates(和 Predicates / PredicateBuilder 谓词)。但是,您可以为此类简单调用实现自己的 Predicate。据我所知,我想它会在 3.6 中修复。