2

我有一个查询,我想在哪里返回给定国家的所有城市。

这很好用,除了我还想调整它以按大小或任何重要顺序对其进行排序以避免 100 限制。我希望前 100 个城市将人们可能选择的最有可能的城市列在首位。(人口,还是?)

[{
  "/location/country/iso3166_1_alpha2": "US",
  "/location/location/contains":[
    "id" : null,
    "name" : null,
    "/location/statistical_region/population" : { "number" : null, "date" : null }
    "type" : "/location/citytown"
  ]
}]​

这可行,但速度很慢,因为它必须计算所有包含的元素:

[{
  "/location/country/iso3166_1_alpha2": "US",
  "/location/location/contains":[
    "id" : null,
    "name" : null,
    "type" : "/location/citytown",
    "/location/location/contains":{"return": "count"}
    "sort": "-/location/location/contains.count"
  ]
}]​

我试过包括/location/statistical_region/population但没有太多运气,有什么想法吗?

4

1 回答 1

1

您可以分两个阶段执行此操作。首先,您可以像上面一样使用 MQL 通过 ISO 代码查找国家/地区:

{
  "/location/country/iso3166_1_alpha2": "US",
  "mid":           null,
  "name":          null
}​

然后,一旦您知道该国家/地区的 MID,您就可以使用 Search API 获得该国家/地区 100 个最相关城市的排名列表,如下所示

filter: (all type:/location/citytown part_of:/m/09c7w0)

这是使用Search API过滤器语法和特殊的Metaschema谓词来查找包含在美国 (/m/09c7w0) 内的实体。这特别有用,因为 Search API 理解 /location/location/contains 是一个传递属性,因此它会查看美国包含的任何实体,即使该包含在 Freebase 图中的深度超过一层。

于 2012-04-03T20:24:04.280 回答