Freebase Search API - 获取所有结果

时间:2015-06-10 14:42:00

标签: java google-api resultset freebase

现在可以从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限制?

我怎样才能得到所有结果?

1 个答案:

答案 0 :(得分:1)

如果没有具体细节,说明问题是什么有点困难,但搜索API肯定是旨在返回完整的结果。 MQLRead API应该返回完整的结果,尽管我认为6K结果是朝向其预期用途的上端。如果你没有像“查询太难”这样的错误,我怀疑你的查询中有一些东西无意中以你不期望的方式限制它。

从Freebase获取大量信息的另一种方法是从数据转储中提取它。

注意:Freebase不再更新,MQLRead和搜索API都将很快消失(尽管Google已经说过Search API将替换为基于知识图的等价物)。

更新:当我使用“return”:“count”从下面的注释运行查询时,我得到的值为536,与使用游标的六次迭代的报告结果相匹配。

请注意,MQLRead会为出生地这样的地方计算 NOT 计算传递闭包,因此查询在葡萄牙出生的人,不会返回列在里斯本的人(另外1143人)。

Search API将返回传递闭包,但我不确定它是否保证完整。这是真正的设计&调整为返回前几个最佳匹配,而不是详尽的列表,但如果您想尝试它,您可以在示例应用程序中使用此查询:

http://freebase-search.freebaseapps.com/?filter=(all+type%3A%2Fpeople%2Fperson+%2Fpeople%2Fperson%2Fplace_of_birth%3APortugal)&output=(%2Fpeople%2Fperson%2Fplace_of_birth%7Bintrinsic%7D+(%2Fpeople%2Fperson%2Fplace_of_birth+))&limit=10&scoring=entity&lang=en

或它的原始API等价物:

https://www.googleapis.com/freebase/v1/search?limit=10&scoring=entity&filter=(all+type%3A%2Fpeople%2Fperson+%2Fpeople%2Fperson%2Fplace_of_birth%3APortugal)&output=(%2Fpeople%2Fperson%2Fplace_of_birth%7Bintrinsic%7D+(%2Fpeople%2Fperson%2Fplace_of_birth+))&lang=en&indent=true