Filter Aerospike多重过滤器查询?

Filter Aerospike多重过滤器查询?,filter,udf,aerospike,Filter,Udf,Aerospike,阅读文档对我帮助不大 1) 据我所知,无法在一个查询中使用多个过滤器。如果是这样,我如何使用Aerospike java客户端API编写查询: SELECT * FROM TABLE_NAME WHERE COLUMN1 = 1 AND COLUMN2 = 2 2) 如果不可能使用JAVA客户机API实现这一目的,那么我必须编写自己的UDF来过滤数据吗 3) 如果我编写自己的UDF(过滤数据),它会很快吗?还是应该使用二级索引来加快它的执行速度?严格来说,您无法直接从列出的多过滤器查询的等效实

阅读文档对我帮助不大

1) 据我所知,无法在一个查询中使用多个过滤器。如果是这样,我如何使用Aerospike java客户端API编写查询:

SELECT * FROM TABLE_NAME WHERE COLUMN1 = 1 AND COLUMN2 = 2
2) 如果不可能使用JAVA客户机API实现这一目的,那么我必须编写自己的UDF来过滤数据吗


3) 如果我编写自己的UDF(过滤数据),它会很快吗?还是应该使用二级索引来加快它的执行速度?

严格来说,您无法直接从列出的多过滤器查询的等效实现中获取一组记录。但是有一条迂回的路。您可以在column1上创建SI(二级索引)以获取记录的第一个子集,将该记录集馈送到一个流udf,在该流udf中您只能读取记录,按column2过滤记录,返回返回值的映射。在UDF中,不能返回记录或记录集或流子集。但是,如果您在每个记录中将记录密钥存储为bin,则可以返回密钥映射,然后在应用程序中访问该记录子集。

于3月15日添加。您可以使用Java客户机的类来构建复杂的过滤器,比如您提到的过滤器。它目前也适用于、和客户端

谓词过滤可用于根据需要构建复杂的过滤逻辑,并以本机方式执行,而不是通过UDF。如果需要,可以将记录自定义项应用于与筛选器匹配的任何记录。如果您只是试图获取符合特定复杂谓词条件的所有记录,那么不要使用UDF,只使用谓词过滤器本身

谓词过滤器可以在二级索引上运行得更快,但这不是必需的。如果没有一个,它将针对一个扫描运行,该扫描返回一个名称空间/集合中的所有记录,并对每个记录应用过滤器。如果确实有辅助索引,请确保对WHERE子句进行排序以使用它。由于目前没有服务器端查询优化器,您应该考虑谓词的顺序来手动优化查询

例如,假设您有一组用户,其bin为gender、age和name,前两个已编入索引,并且正在查找35到44岁之间名称以“S”开头的所有女性用户。您希望使用从查询中返回最少记录的索引。在这种情况下,使用年龄索引将返回比性别更少的记录,并且执行速度更快。在PredExp中,您还希望将谓词排序为短路,并尽快跳过正在匹配的记录。在这种情况下,您可能希望将性别bin值与name上更昂贵的字符串正则表达式进行比较