当前位置: 首页 > 知识库问答 >
问题:

布尔字段上的气钉过滤器表达式不起作用

景子安
2023-03-14

我用Java编写了以下Aerospike过滤器。字段 1 和字段 2 都是布尔值。由于某种原因,“filterByField.ValidBoth”条件不会产生 true,尽管记录与条件匹配。

由于它是一个布尔值,所以我使用 1 表示真,0 表示假。

我错过了什么吗?

public Exp getFilterByFieldFilter(FilterByField filterByField) {
    if (filterByField == null || "".equals(filterByField)) {
        return Exp.val(true);
    }
    if (filterByField == filterByField.All) {
        return Exp.val(true);
    } else if (filterByField == filterByField.ValidBoth) {
        return Exp.and(Exp.eq(Exp.intBin("Field1"), Exp.val(0)),
                Exp.eq(Exp.intBin("Field2"), Exp.val(0)));
    }
}

从我通过 AQL 从数据库结果中看到的情况来看,那些未设置为 true 的结果不会反映在结果集中。

我应该编写我的过滤器是检查这种情况的不同方法吗?如果是这样,这种情况会是什么样子?

我尝试检查 Exp.val(NULL),但出现错误。

这是我通过 AQL 设置的数据库结果集

 [
        {
          "PK": "1",
          "Name": "ABC",
          "Field1": 1,
          "Field2": 1
        },
        {
          "PK": "2",
          "Name": "EFG",
          "Field1": 1
        },
        {
          "PK": "3",
          "Name": "XYZ",
        }
        
    ]

共有1个答案

秦鹏飞
2023-03-14

如果 bin 名称 Field1 和 Field2 包含布尔值,则应以这种方式构造表达式(无论所需的逻辑是什么):

Exp.eq(Exp.boolBin("Field1"), Exp.val(false))

我测试了下面的结构,似乎对我有用:

WritePolicy wPolicy = new WritePolicy();

Bin b1 = new Bin("Field1", Value.get(0));
Bin b2 = new Bin("Field2", Value.get(0));
Bin b3 = new Bin("Data", Value.get("data"));

wPolicy.recordExistsAction = RecordExistsAction.REPLACE;

client.put(wPolicy, key, b1, b2, b3);

//client.put(wPolicy, key, b1, b3);

Exp condFilter = Exp.and( 
Exp.eq(Exp.intBin("Field1"),Exp.val(0) ),
Exp.eq(Exp.intBin("Field2"),Exp.val(0) )
);

Policy policy = new Policy();

policy.filterExp = Exp.build(condFilter);
Record record = client.get(policy, key);
System.out.println("Read back the record.");

System.out.println("Record values are:");
System.out.println(record);

//Get record without filter condition
record = client.get(null, key);
System.out.println(record);

有效条件:

Read back the record.
Record values are:
(gen:18),(exp:0),(bins:(Field1:0),(Field2:0),(Data:data))
(gen:18),(exp:0),(bins:(Field1:0),(Field2:0),(Data:data))

无效条件(无字段 2 箱):

Read back the record.
Record values are:
null
(gen:19),(exp:0),(bins:(Field1:0),(Data:data))
 类似资料:
  • 我有一个包含特殊字符的字符串列表 它像这样工作得很好 输出 安得拉邦 卡纳塔克邦 当我使用过滤器来做这件事时 它不起作用!我把名单原封不动地拿回来了。 我期待着这样一份清单['Andhra Pradesh','Karnataka'] 我希望从字符串列表中删除特殊字符,如,和

  • 问题内容: 根据http://www.elastic.co/guide/zh-cn/elasticsearch/guide/master/combining- filters.html 上的elasticsearch文档,布尔过滤器可以是以下内容: 在含义上,它等效于以下逻辑运算: 这样对吗? 谢谢! 问题答案: 正如Andrei在评论中指出的,这是对 过滤器 的正确理解: 可以翻译成 可以翻译成

  • 过滤表达式 mitmproxy工具中的许多命令都使用过滤器表达式。过滤器表达式由以下运算符组成: 命令 描述 〜a 匹配响应资源:CSS,Javascript,Flash,images。 〜b regex Body 〜bq regex 请求的Body 〜bs regex 响应的Body 〜c int HTTP响应码 〜d regex 域名 〜dst regex 匹配目标地址 〜e 匹配错误 〜h

  • 问题内容: 以下HTML,Javascript和JSON可以正确呈现,但该过滤器根本不起作用。我们做错了什么? Javascript: 这两个JSON: api / distributors / my: api /仪表板/目录 问题答案: 角度过滤器无法将对象的对象作为输入。ng- repeat可以渲染它们,但是过滤器需要一个对象数组。解决此问题的最简单方法是让服务器返回没​​有命名键的数组。您还

  • 问题内容: 我如何布尔计算包含布尔表达式的字符串?喜欢: 用户应该能够定义自己的变量(),并定义自己的布尔表达式()。因此,我将所有表达式仅作为字符串使用。我如何评估它们? 问题答案: 您可以使用Nambari评论的ScriptEngine: 打印0。 还要注意,该表达式不是布尔表达式,而是按位运算。

  • 我开始学习布尔表达式。我正试图找出以下问题: 假设age1、age2和age3是int变量,假设答案是布尔变量。编写一个表达式,当age1小于或等于age2并且age2小于或等于age3时,该表达式将答案指定为true。否则答案应为false。 我已经尝试了一些东西,但对Java来说还是比较陌生的。我能把答案打印出来,但我的数字还是有问题。 这是错误的: 我只是不知道如何解决这个问题,或者代码中到

  • 我有两个实体:类别和具有一对多关系的产品。 如果价格大于100,我如何按产品数量订购类别?类似(这不起作用):