如何通过Freebase中的MQL获取所有相关主题

时间:2013-12-02 11:00:33

标签: freebase mql

我想获得一个主题的所有相关主题。为了使它更清楚,我的例子是:

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

MQL查询应该给我所有的办公室持有人,他们基本上是执政官员。在我的例子中,所有美国的管理官员都应归还,总数约为3.2k。所以问题是上面的查询每次默认只返回100个结果。所以我可以添加limit参数来获得1000个结果:

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

但是将限制设置为更高的值不起作用,因为查询结果太大了。

那么有人知道如何解决这个问题吗?我试图使用游标迭代结果但是游标似乎不适用于这种嵌套类型的查询。

1 个答案:

答案 0 :(得分:2)

您的查询只返回一个对象(/en/united_states),这就是光标无法帮助您的原因。您需要做的是将查询内部翻出来,以便当前子查询(office_holder)的部分位于外部级别,以便您可以遍历它。

您可以通过粘贴原始查询(click here)轻松地在在线查询编辑器中反转查询,将光标放在最里面的子查询上,然后单击invert query,这将为您提供类似{{{1}的内容3}}:

[{
  "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
  }]
}]

这是一个可以使用游标迭代的查询。

但是,您应该检查的一件事是办公室jurisdiction属性的覆盖范围,以确保其足够好,以便为您提供有用的数据。