【问题标题】:Freebase Search API - Get All ResultsFreebase 搜索 API - 获取所有结果
【发布时间】:2015-06-10 14:42:00
【问题描述】:

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

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

【问题讨论】:

    标签: java google-api resultset freebase


    【解决方案1】:

    如果没有具体细节,很难说出问题所在,但 Search API 绝对旨在返回完整的结果。 MQLRead API 应该返回完整的结果,尽管我认为 6K 结果接近其预期用途的上限。如果您没有出现“查询太难”之类的错误,我怀疑您的查询中有些东西无意中以您意想不到的方式限制了它。

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

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

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

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

    搜索 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

    【讨论】:

    • 谢谢!我还尝试在浏览器中运行“查询编辑器”,并且只进行了 6 次迭代,直到“光标”变为“假”。我想让所有人都出生在葡萄牙。我使用了这个查询 [{ "name": null, "place_of_birth": "Portugal", "type": "/people/person" }] 我可以用 'Knowledge Graph' 来做吗?
    • 我已根据您的查询更新了我的答案。我怀疑问题的根源在于 MQLRead 没有计算位置查询的传递闭包。
    猜你喜欢
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2017-09-06
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多