Freebase 搜索 API - 获取所有结果

Freebase Search API - Get All Results

现在是否可以从 Freebase 搜索中获取所有结果 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 限制?

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

如果没有具体说明,很难说出问题是什么,但搜索 API 肯定是 而不是 旨在 return 完整的结果。 MQLRead API 应该 return 完成结果,尽管我认为 6K 结果接近其预期用途的上限。如果您没有出现像 "Query too hard," 这样的错误,我怀疑您的查询中有些东西无意中以您不希望的方式限制了它。

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

注意:Freebase 不再更新,MQLRead 和搜索 API 将很快消失(尽管 Google 表示搜索 API 将被替换与基于知识图的等价物)。

更新:当我 运行 来自下面评论的查询 "return":"count" 时,我得到一个值 536,它与使用光标.

请注意,MQLRead 不会 计算诸如出生地之类的地方的传递闭包,因此查询出生在葡萄牙的人不会 return 被列为出生地的人里斯本(另有1143人。)

搜索 API 将 return 传递闭包,尽管我不确定它是否保证完整。它的真正设计和调整是 return 最匹配的前几名,而不是详尽的列表,但如果您想试验一下,可以在示例应用程序中使用此查询:

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