2015-06-10 4 views
1

Возможно ли получить все результаты от API поиска Freebase?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

Без специфики немного сложно сказать, в чем проблема, но API поиска определенно не предназначен для возврата полных результатов. API MQLRead должен возвращать полные результаты, хотя я бы рассмотрел результаты 6K в направлении верхнего предела его предполагаемого использования. Если вы не ошибаетесь, например, «слишком сложно запросить», я подозреваю, что в вашем запросе есть что-то, что непреднамеренно ограничивает его так, как вы этого не ожидаете.

Другой способ получить большое количество информации из Freebase - извлечь его из дампов данных.

ПРИМЕЧАНИЕ. Freebase больше не обновляется, и как API MQLRead, так и API поиска будут уходить в ближайшее время (хотя Google сказал, что API поиска будет заменен эквивалентом, основанным на знании).

UPDATE: Когда я запускаю запрос из комментария ниже с помощью «return»: «count», я получаю значение 536, которое совпадает с сообщенными результатами шести итераций с помощью курсора.

Обратите внимание, что MQLRead делает НЕ вычисления транзитивного замыкания для таких мест, как родина, так запрашивая для людей, родившихся в Португалии, не будет возвращать человек, перечисленные в рождаясь в Лиссабоне (еще 1143 людей.)

The 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

+0

Спасибо! Я также попытался запустить «Редактор запросов» в своем браузере и только 6 итераций, пока «курсор» не станет «ложным». Я хотел, чтобы все люди родились в Португалии. Я использовал этот запрос [{ «имя»: null, «place_of_birth»: «Португалия», «type»: «/ people/person» }] Могу ли я сделать это с помощью «Графа знаний»? – gmlvsv

+0

Я обновил свой ответ на основе вашего запроса. Я подозреваю, что корень проблемы заключается в том, что MQLRead не вычисляет транзитивное замыкание для запросов местоположения. –

 Смежные вопросы

  • Нет связанных вопросов^_^