我正在尝试使用多个过滤器来查询aerospike,并参考此link。
我能够根据给定的lua脚本查询airospike的1个过滤器参数,但是当必须传递2个以上的过滤器参数时,他们会使用lua脚本(例如传递两个更多参数,如年龄,性别和密码)。登记/> 这是我第一次使用lua。
Lua Script:
local function map_profile(record)
return map {name=record.name, password=record.password}
end
function check_password(stream,password)
local function filter_password(record)
return record.password == password
end
return stream : filter(filter_password) : map(map_profile)
end
提前致谢。
答案 0 :(得分:3)
filter函数可以有额外的参数并返回一个闭包,它可以访问那些,同时仍然符合作为记录的一个参数的预期存根,具有布尔返回值。
local function filter_password(password)
return function(rec)
if rec['password'] and (type(rec['password']) == 'string') and
rec['password'] == password then
return true
end
return false
end
end
local function map_profile(record)
return map {name=record.name, password=record.password}
end
function check_password(stream,password)
return stream : filter(filter_password(password)) : map(map_profile)
end
但是,现在查询或扫描多个过滤器的最佳方法(从predicate filtering起)是使用PredExp。在大多数情况下(除非你需要以某种方式将两个记录的bin的值相互比较),你将跳过UDF并使用examples类(在Java客户端中,或者在另一个中等效) )。无论您构建的表达式有多复杂,您都只返回与过滤器匹配的记录。请参阅Aerospike Java客户端中的C或C#,Go和{{3}}客户端。
答案 1 :(得分:2)
我们开发了SQL wrapper for Aerospike,它可以从您的SQL查询构建LUA代码。它可能对你有帮助。