我们目前正在测试"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())结果是null,但是当我们删除查询带来的所有记录的"where“语句时,文档说明查询与辅助索引一起工作,但这是如何工作的呢?
致以问候。
发布于 2017-02-06 15:14:19
您可以在查询中使用一个过滤器。这个过滤器,在您的例子中,就是相等过滤器,在public_profile库中。要使用筛选器,您必须在public_profile bin上构建二级索引(SI),但是SI只能位于包含数字或字符串数据类型的bin上。因此,要执行您尝试执行操作,请将public_profile更改为数值条目,例如0或1,然后在绑定上添加二级索引,并对值0或1使用相等过滤器。虽然您可以构建多个SI,但在任何给定的查询中只能调用一个过滤器。不能使用"AND“链接多个筛选器。如果您必须使用多个筛选器,则必须编写Stream UDF(用户定义函数)。你可以使用AQL来定义SIs,你只需要做一次。
$aql
aql>help --- see the command to add secondary index.
aql>exitSI驻留在进程RAM中。一旦定义,任何添加或修改的新数据都会在适用的情况下由aerospike自动编制索引。如果在public_profile上将索引定义为数字,但在某些记录中在绑定中插入字符串数据,则这些记录将不会被索引,也不会参与查询筛选。
https://stackoverflow.com/questions/42060297
复制相似问题