freebase api按城市相关性排序

时间:2012-04-03 08:30:56

标签: google-api freebase relevance mql

我有一个查询,我想返回给定国家/地区的所有城市。

这样可以正常工作,除了我还要进行调整以便按大小或任何重要顺序对其进行排序以避免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,但没有太多运气,任何想法?

1 个答案:

答案 0 :(得分:1)

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

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

然后,一旦您知道该国家/地区的MID,就可以使用搜索API获取该国家/地区100个最相关城市的排名列表like this

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

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