Aerospike where 查询索引 python

Aerospike where query index python

我们目前正在测试 "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" 语句时,查询会带来所有记录,文档说查询使用二级索引,但它是如何工作的?

此致。

您可以在一个查询中使用一个过滤器。该过滤器(在您的情况下为相等过滤器)位于 public_profile 容器中。要使用过滤器,您必须在 public_profile bin 上构建二级索引 (SI),但是 SI 只能在包含数字或字符串数​​据类型的 bin 上。因此,要执行您正在尝试执行的操作,请将 public_profile 更改为数字条目,比如 0 或 1,然后在该 bin 上添加一个二级索引,并对值 0 或 1 使用相等过滤器。虽然您可以构建多个 SI,您只能在任何给定查询中调用一个过滤器。您不能使用 "AND" 链接多个过滤器。如果必须使用多个过滤器,则必须编写流 UDF(用户定义函数)。您可以使用 AQL 来定义 SI,您只需要做一次。

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

SI 驻留在进程 RAM 中。一旦定义,任何添加或修改的新数据都会在适用时由 aerospike 自动索引。如果您将 public_profile 上的索引定义为 NUMERIC,但在某些记录中将字符串数据插入到该 bin 中,则这些记录将不会被索引并且不会参与查询过滤器。