FreeBase API для сортировки по релевантности города - PullRequest
2 голосов
/ 03 апреля 2012

У меня есть запрос, в котором я хотел бы вернуть все города для данной страны.

Это прекрасно работает, за исключением того, что я хотел бы также настроить так, чтобы отсортировать его по размеру или любой важности, чтобы избежать ограничения в 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 Ответ

1 голос
/ 04 апреля 2012

Вы можете сделать это в два этапа.Во-первых, вы можете искать страну по коду ISO, используя MQL, как вы делали выше:

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

Затем, когда вы знаете MID для страны, вы можете использовать API поиска, чтобы получить ранжированный список100 наиболее релевантных городов этой страны как этот .

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

Используется синтаксис фильтра API поиска и специальные предикаты Метасхема чтобы найти объекты, которые содержатся в Соединенных Штатах (/ m / 09c7w0).Это особенно полезно, потому что API поиска понимает, что / location / location / contains является транзитивным свойством и поэтому будет смотреть на любую сущность, которая содержится в Соединенных Штатах, даже если эта локализация находится на глубине более одного уровня в графе Freebase.

...