为了账号安全,请及时绑定邮箱和手机立即绑定

手动限制 Graql 查询结果迭代器

手动限制 Graql 查询结果迭代器

斯蒂芬大帝 2021-08-05 17:39:13
如果我进行一个简单的查询,例如match $x isa dog; limit 5; get;无论 Grakn 中存储了多少条狗,我都会得到 5 个结果。这很好,但是如果我在进行查询时不知道我想要多少条狗并且想限制我稍后在代码中检索的数量怎么办?这是我使用 Python 客户端的想法:import graknclient = grakn.Grakn(uri="localhost:48555")session = client.session(keyspace="dogs_keyspace")tx = session.transaction(grakn.TxType.WRITE)results = tx.query('match $x isa dog; get;')  # I don't limit now, so I can do it laterresults 是一个迭代器,所以我不能这样做:limited_results = list(results)[:5]因为如果我这样做,那么所有的狗都会被放入列表中,然后我会选择前 5 只,如果我在知识图中有 1,000,000 只狗,这真的是低效的。但我可以说:limited_results = list(itertools.islice(results, 5))我应该只得到前 5 只狗,而不要碰其他 999,995 只狗。但我的问题是:这种方法是否比limit 5在查询中提供更慢match $x isa dog; limit 5; get;?
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

如果您不希望 Grakn 检索图中的所有dogs 并且只访问前 5 个,那么您的两种方法都是有效的,因为它们都使用惰性迭代器,这意味着在您明确要求下一个结果之前不会尝试检索.

如果您直接发出查询match $x isa dog; limit 5; get;,Grakn 将构建一个迭代器,它只会迭代 5 次并将结果返回给客户端。


查看完整回答
反对 回复 2021-08-05
  • 1 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号