2013-12-02 3 views
1

Я хотел бы получить все связанные темы по одной теме. Для того, чтобы сделать его более четким, вот мой пример:Как получить все связанные темы через MQL из Freebase

[{ 
    "id": "/en/united_states", 
    "name": null, 
    "/government/governmental_jurisdiction/governing_officials": [{ 
    "/government/government_position_held/office_holder": [{ 
     "id": null, 
     "name": null 
    }] 
    }] 
}] 

Запрос MQL должен дать мне все держатели офиса, которые в основном руководящие должностные лица. В моем примере все должностные лица правительства Соединенных Штатов должны быть возвращены, что составляет около 3,2 тыс. Сум. Таким образом, проблема заключается в том, что указанный выше запрос возвращает только 100 результатов по умолчанию. Так что я могу добавить параметр предела, чтобы получить, например, 1000 результатов:

[{ 
    "id": "/en/united_states", 
    "name": null, 
    "/government/governmental_jurisdiction/governing_officials": [{ 
    "/government/government_position_held/office_holder": [{ 
     "id": null, 
     "name": null 
    }], 
    "limit": 1000 
    }] 
}] 

Но установить ограничение на более высокое значение не работает, так как результат запроса становится слишком большим.

У кого-нибудь есть идея, как решить эту проблему? Я попытался использовать курсор для повторения результатов, но курсор, похоже, не работает для этого вложенного типа запроса.

ответ

2

Ваш запрос возвращает только один объект (/en/united_states), поэтому курсор вам не поможет. То, что вам нужно сделать, - это сделать запрос наизнанку, чтобы часть, которая в настоящее время является подзапросом (office_holder), находится на внешнем уровне, чтобы вы могли проходить через нее.

Вы можете инвертировать запрос легко в онлайн-редакторе запросов путем вставки в исходном запросе (click here), поместив курсор на внутренней подзапроса и нажав invert query который даст вам что-то вроде this:

[{ 
    "id": null, 
    "name": null, 
    "type": "/government/politician", 
    "!/government/government_position_held/office_holder": [{ 
    "!/government/governmental_jurisdiction/governing_officials": [{ 
     "id": "/en/united_states", 
     "name": null 
    }] 
    }] 
}] 

который работает, но немного некрасиво и может быть упрощено до this:

[{ 
    "id": null, 
    "name": null, 
    "type": "/government/politician", 
    "government_positions_held": [{ 
    "jurisdiction_of_office": [{ 
     "id": "/en/united_states" 
    }], 
    "basic_title": null 
    }] 
}] 

который является запрос, который можно перебирать с помощью курсора.

Одна вещь, которую вы должны проверить, однако, это покрытие имущества для офисов, чтобы убедиться, что оно достаточно хорошо заполнено, чтобы предоставить вам полезные данные.

+0

Большое спасибо. Это полностью решает мою проблему. И да, я буду смотреть на «юрисдикцию» для получения полезных данных. Но в любом случае я не знал о существовании инвертированных запросов, которые мне очень помогают! Большой! :) – sandro1111