我有一个列表类型的垃圾箱。我想查询并获取该 bin 的值等于变量“val”的记录。使用 PredExp 可以通过以下方式完成:
predExps = Arrays.asList(
PredExp.stringVar("v"),
PredExp.stringValue(String.valueOf(val)),
PredExp.stringEqual(),
PredExp.listBin(fieldName),
PredExp.listIterateOr("v"));
PredExp 从 6.0.0 开始被弃用,如何复制相同的行为?我正在使用相同的表达式,但它没有按预期工作。
exp = Exp.build(
ListExp.getByValue(
ListReturnType.VALUE, Exp.val(String.valueOf(val)),
Exp.listBin(fieldName) ) );
我使用表达式来复制问题,但我想我可能必须在语句内部使用过滤器。我已经有一个过滤器在查询语句中传递。两个过滤器可以合并为一个吗?
看起来你在这里问了同样的问题:https://discuss.aerospike.com/t/replacement-for-predexp-on-a-list-bin-of-strings/10657/2 - 我验证了你的表达构造。您在这里为您的问题添加了更多色彩。那么让我继续: 对于读取查询:
query(QueryPolicy policy, Statement stmt)
,您将在 Statement 对象中指定二级索引过滤器(如果您正在使用二级索引过滤器),并使用 QueryPolicy 对象指定要在与 SI 匹配的记录之后应用的过滤器表达式。
Statement.setFilter
——SI
QueryPolicy.filterExp
——用于基于表达式的后续过滤。如果您需要代码示例,请告诉我。