现在可以从Freebase Search API获得所有结果吗?
今天我在Java中尝试了两种方法:
1) www.googleapis.com/freebase/v1/search?filter=..."
Using "cursor"(integer) and "limit" options.
2) www.freebase.com/ajax/156b.lib.www.tags.svn.freebase-site.googlecode.dev/cuecard/mqlread.ajax?&query=
Try to simulate 'Query Editor' (https://www.freebase.com/query)
Using "cursor" from the previous results set (String).
但是在这两种方法中我只得到了
- 200 (first option)
- 500 (second option)
记录(应该是大约6000条记录)......
经过几次迭代后,我得到了
- "Request too large, cursor: 200, limit: 200" (first option, only 1 iteration)
- "cursor is false" (second option, 6 iterations)
消息。
是Freebase问题还是API限制?
我怎样才能得到所有结果?
答案 0 :(得分:1)
如果没有具体细节,说明问题是什么有点困难,但搜索API肯定是不旨在返回完整的结果。 MQLRead API应该返回完整的结果,尽管我认为6K结果是朝向其预期用途的上端。如果你没有像“查询太难”这样的错误,我怀疑你的查询中有一些东西无意中以你不期望的方式限制它。
从Freebase获取大量信息的另一种方法是从数据转储中提取它。
注意:Freebase不再更新,MQLRead和搜索API都将很快消失(尽管Google已经说过Search API将替换为基于知识图的等价物)。
更新:当我使用“return”:“count”从下面的注释运行查询时,我得到的值为536,与使用游标的六次迭代的报告结果相匹配。
请注意,MQLRead会为出生地这样的地方计算 NOT 计算传递闭包,因此查询在葡萄牙出生的人,不会返回列在里斯本的人(另外1143人)。
Search API将返回传递闭包,但我不确定它是否保证完整。这是真正的设计&调整为返回前几个最佳匹配,而不是详尽的列表,但如果您想尝试它,您可以在示例应用程序中使用此查询:
或它的原始API等价物: