2015-06-10 33 views
1

現在是否可以從Freebase Search API獲取所有結果?Freebase Search API - 獲取所有結果

今天我試着2點的方法在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

沒有具體說明,有點難以說出問題所在,但Search API肯定是而不是,意在返回完整的結果。 MQLRead API應該返回完整的結果,儘管我認爲6K結果將會達到其預期用途的上限。如果你沒有像「查詢太難」這樣的錯誤,我懷疑你的查詢中有某些內容會無意中以你不期望的方式限制它。

從Freebase獲取大量信息的另一種方式是從數據轉儲中提取它。

注意:Freebase不再被更新,並且MQLRead和搜索API都將很快消失(儘管Google已經表示Search API將會被基於知識圖的等價物替代)。

更新:當我從下面的評論與「迴歸」運行查詢:「數」,我得到的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

+0

謝謝!我也嘗試在我的瀏覽器中運行'查詢編輯器',只有6次迭代,直到'遊標'變成'假'。我想讓所有人都出生在葡萄牙。我使用了這個查詢[{ 「name」:null, 「place_of_birth」:「Portugal」, 「type」:「/ people/person」 }]我可以使用'Knowledge Graph'嗎? – gmlvsv

+0

我已根據您的查詢更新了我的答案。我懷疑問題的根源在於MQLRead沒有爲位置查詢計算傳遞閉包。 –