首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Aerospike查询索引python

Aerospike查询索引python
EN

Stack Overflow用户
提问于 2017-02-06 12:26:16
回答 1查看 292关注 0票数 1

我们目前正在测试"aerospike“。但是文档中有一些我们不能理解的关于键的内容。

代码语言:javascript
复制
key = ('trivium', 'profile', 'data')
# Write a record
client.put(key, {
    'name': 'John Doe',
    'bin_data': 'KIJSA9878MGU87',
    'public_profile': True
})

我们读到了有关名称空间的内容,但是当我们尝试使用一般文档进行查询时。

代码语言:javascript
复制
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“语句时,文档说明查询与辅助索引一起工作,但这是如何工作的呢?

致以问候。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,你只需要做一次。

代码语言:javascript
复制
$aql
aql>help  --- see the command to add secondary index.
aql>exit

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42060297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档