2012-04-03 1 views
2

私には、特定の国のすべての都市を返すクエリがあります。都市別のソートのためのfreebase API関連性

これは、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

これは2段階で実行できます。まず、あなたは上記の行ったようMQLを使用して、ISOコードで国を調べることができます。

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

次にあなたが国のためにMIDを知っていれば、あなたが最も100のランク付けリストを取得するために、検索APIを使用することができますその国の関連する都市like this

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

これは米国(/ M/09c7w0)内に含まれているエンティティを見つけるために、Search APIフィルタの構文と特別Metaschema述語を使用しています。これは、検索APIが/ location/location/containsが推移的なプロパティであることを理解しているため、Freebaseのグラフ内に複数のレベルの包含が含まれていても、米国に含まれるすべてのエンティティを参照するため便利です。

関連する問題