Aerospike查询索引python

Aerospike查询索引python,python,aerospike,nosql,Python,Aerospike,Nosql,我们目前正在测试“aerospike”。 但是文档中有一些我们不了解的关于密钥的要点 key = ('trivium', 'profile', 'data') # Write a record client.put(key, { 'name': 'John Doe', 'bin_data': 'KIJSA9878MGU87', 'public_profile': True }) 我们阅读了有关名称空间的内容,但是当我们试图使用常规文档进行查询时 client = aer

我们目前正在测试“aerospike”。 但是文档中有一些我们不了解的关于密钥的要点

key = ('trivium', 'profile', 'data')
# Write a record
client.put(key, {
    'name': 'John Doe',
    'bin_data': 'KIJSA9878MGU87',
    'public_profile': True
})
我们阅读了有关名称空间的内容,但是当我们试图使用常规文档进行查询时

client = aerospike.client(config).connect()
        query = client.query('trivium', 'profile')
        query.select('name', 'bin_data')
        query.where(p.equals('public_profile', True))
        print(query.results())
结果是空的,但是当我们调用“where”语句时,查询会带来所有记录,文档中说查询可以与二级索引一起工作,但是这是如何工作的呢


注意。

您可以在查询中使用一个筛选器。该过滤器(在您的例子中是相等过滤器)位于公共_profile bin上。若要使用筛选器,必须在公共_配置文件箱上构建二级索引(SI),但是SIs只能位于包含数字或字符串数据类型的箱上。因此,若要执行您试图执行的操作,请将public_profile更改为数字条目,例如0或1,然后在该bin上添加二级索引,并对值0或1使用相等筛选器。虽然可以构建多个SIs,但在任何给定查询中只能调用一个过滤器。不能用“和”链接多个筛选器。如果必须使用多个过滤器,则必须编写流UDF(用户定义函数)。你可以用AQL来定义SIs,你只需要做一次

$aql
aql>help  --- see the command to add secondary index.
aql>exit

SIs驻留在进程RAM中。一旦定义,任何添加或修改的新数据将由aerospike自动编制索引(如适用)。如果您将public_profile上的索引定义为数字,但在某些记录中会在该bin中插入字符串数据,则这些记录将不会被索引,也不会参与查询筛选。

感谢完整的答案,您是对的,我认为Aerospike很快,我们认为可以将其用于用户管理员,但这似乎是一个复杂的查询,对系统来说很重要。不过,我们将尝试另一种技术,如mongo或cassandra。非常感谢,Regardsure,您应该使用最适合您的用例的解决方案。顺便说一句,流UDF非常容易编写。下面是一个简单的例子。代码如下:更新的github链接: