如何在 Aerospike 中获取与正则表达式匹配的所有记录?
How to get all the records matching a regex in Aerospike?
我在一组中有数百万条记录。我想检索所有匹配相同模式的记录。
例如我可能有:
id=4444?mode=mode1?fieldA=abc
id=4444?mode=mode1?fieldA=azerty
id=4444?mode=mode1?fieldA=qwerty
id=4444?mode=mode1?fieldA=foo
id=4444?mode=mode1?fieldA=bar
是否可以在事先不知道 fieldA
的值的情况下进行查询以获取上述所有记录?正则表达式中的类似内容:
id=4444?mode=mode1?fieldA=[\w]*
谢谢你的时间。
是的,可以做到。您需要先通过二级索引进行查询,以首先将结果集缩小到可管理的大小,然后使用 Lua 编写过滤器,过滤掉您不想要的。此过滤器可以采用您要匹配的正则表达式(动态传递)并且 return 仅那些匹配的记录。
虽然这可行,但它的性能不如 Aerospike 中的键值操作。您肯定希望在将此类解决方案投入生产之前对其进行基准测试。
Predicate filtering was added in release 3.12 on March 15. You can use the stringRegex method of the PredExp class of the Java client to build complex filters such as the one you mentioned. It also currently exists for the C, C# and Go 个客户。
Aerospike Java 客户端中有一个 similar example:
Statement stmt = new Statement();
stmt.setNamespace(params.namespace);
stmt.setSetName(params.set);
stmt.setFilter(Filter.range(binName, begin, end));
stmt.setPredExp(
PredExp.stringBin("bin3"),
PredExp.stringValue("prefix.*suffix"),
PredExp.stringRegex(RegexFlag.ICASE | RegexFlag.NEWLINE)
);
com.aerospike.client.query 中的 RegexFlag class 定义了您可以使用哪些正则表达式,以及它们的行为方式。
我在一组中有数百万条记录。我想检索所有匹配相同模式的记录。
例如我可能有:
id=4444?mode=mode1?fieldA=abc
id=4444?mode=mode1?fieldA=azerty
id=4444?mode=mode1?fieldA=qwerty
id=4444?mode=mode1?fieldA=foo
id=4444?mode=mode1?fieldA=bar
是否可以在事先不知道 fieldA
的值的情况下进行查询以获取上述所有记录?正则表达式中的类似内容:
id=4444?mode=mode1?fieldA=[\w]*
谢谢你的时间。
是的,可以做到。您需要先通过二级索引进行查询,以首先将结果集缩小到可管理的大小,然后使用 Lua 编写过滤器,过滤掉您不想要的。此过滤器可以采用您要匹配的正则表达式(动态传递)并且 return 仅那些匹配的记录。
虽然这可行,但它的性能不如 Aerospike 中的键值操作。您肯定希望在将此类解决方案投入生产之前对其进行基准测试。
Predicate filtering was added in release 3.12 on March 15. You can use the stringRegex method of the PredExp class of the Java client to build complex filters such as the one you mentioned. It also currently exists for the C, C# and Go 个客户。
Aerospike Java 客户端中有一个 similar example:
Statement stmt = new Statement();
stmt.setNamespace(params.namespace);
stmt.setSetName(params.set);
stmt.setFilter(Filter.range(binName, begin, end));
stmt.setPredExp(
PredExp.stringBin("bin3"),
PredExp.stringValue("prefix.*suffix"),
PredExp.stringRegex(RegexFlag.ICASE | RegexFlag.NEWLINE)
);
com.aerospike.client.query 中的 RegexFlag class 定义了您可以使用哪些正则表达式,以及它们的行为方式。