概要

Freebase Search API は、フリーテキスト クエリが与えられた場合の Freebase データへのアクセスを提供します。クエリの結果は並べ替えられ、数値の関連性スコアが表示されます。
デベロッパーは、検索結果を特定のタイプのデータに制限するためにフィルタを適用できます。詳細な検索クエリを作成する方法について詳しくは、検索クックブックをご覧ください。
デベロッパーが Search API を使用する方法の例を以下に示します。
- エンティティの自動提案(Freebase Suggest Widget など)
- 特定の名前を持つ注目すべきエンティティのランキング リストを取得します。
- 検索メタスキーマを使用したエンティティの検索
次のサンプルコードは、サポートされている複数の言語で「Cee Lo Green」というテキストに一致する音楽アーティストを検索する方法を示しています。また、「Lady Killer」というものを作成することも可能です。
Python
import json
import urllib
api_key = open(".api_key").read()
query = 'blue bottle'
service_url = 'https://www.googleapis.com/freebase/v1/search'
params = {
'query': query,
'key': api_key
}
url = service_url + '?' + urllib.urlencode(params)
response = json.loads(urllib.urlopen(url).read())
for result in response['result']:
print(result['name'] + ' (' + str(result['score']) + ')')
Ruby
require 'rubygems'
require 'cgi'
require 'httparty'
require 'json'
require 'addressable/uri'
API_KEY = open(".freebase_api_key").read()
url = Addressable::URI.parse('https://www.googleapis.com/freebase/v1/search')
url.query_values = {
'query' => 'Blue Bottle',
'key'=> API_KEY
}
response = HTTParty.get(url, :format => :json)
response['result'].each { |topic|
puts topic['name']
}
Java
package com.freebase.samples;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.jayway.jsonpath.JsonPath;
import java.io.FileInputStream;
import java.util.Properties;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class SearchExample {
public static Properties properties = new Properties();
public static void main(String[] args) {
try {
properties.load(new FileInputStream("freebase.properties"));
HttpTransport httpTransport = new NetHttpTransport();
HttpRequestFactory requestFactory = httpTransport.createRequestFactory();
JSONParser parser = new JSONParser();
GenericUrl url = new GenericUrl("https://www.googleapis.com/freebase/v1/search");
url.put("query", "Cee Lo Green");
url.put("filter", "(all type:/music/artist created:\"The Lady Killer\")");
url.put("limit", "10");
url.put("indent", "true");
url.put("key", properties.get("API_KEY"));
HttpRequest request = requestFactory.buildGetRequest(url);
HttpResponse httpResponse = request.execute();
JSONObject response = (JSONObject)parser.parse(httpResponse.parseAsString());
JSONArray results = (JSONArray)response.get("result");
for (Object result : results) {
System.out.println(JsonPath.read(result,"$.name").toString());
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
JavaScript
この例では、jQuery ライブラリを使用します。PHP
<!DOCTYPE html>
<html>
<body>
<?php
include('.freebase-api-key');
$service_url = 'https://www.googleapis.com/freebase/v1/search';
$params = array(
'query' => 'Blue Bottle',
'key' => $freebase_api_key
);
$url = $service_url . '?' . http_build_query($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
foreach($response['result'] as $result) {
echo $result['name'] . '<br/>';
}
?>
</body>
</html>
任意の言語がサポートされているかどうかを確認するには、クライアント ライブラリのページもご覧ください。
Search API ドキュメント
次のドキュメントもご覧ください。
- API の使用方法について詳しくは、検索のリファレンス ドキュメントをご覧ください。
- 詳細な検索クエリを作成する方法について詳しくは、検索クックブックをご覧ください。
- エンティティとプロパティの関係の記述方法については、検索メタスキーマのドキュメントをご覧ください。
セキュリティ上の考慮事項
Search API は、Freebase グラフに保存されているユーザー作成コンテンツをインデックスに登録して検索します。つまり、ウェブページのコンテンツを直接使用するには、まず安全なエスケープを使用する必要があります。
詳しくは、スタートガイド: セキュリティをご覧ください。
高度なフィルタ
Search API は、適切なエンティティを検索しやすくするために、多数のフィルタ制約をサポートしています。
たとえば、「タイプ」フィルタ制約を使用すると、Freebase 内の最も著名な人物のリストを表示できます。
filter=(any type:/people/person)
フィルタ制約は、さまざまな入力を受け入れます。
- スキーマ エンティティまたはユーザーの、人が読める形式の ID。例:
- 型制約の場合は
/people/person
。 - ドメイン制約の場合は
/film
- 型制約の場合は
- フリーベース MID、例:
- 同じ
/people/person
型制約の/m/01g317
/m/010s
(上記の/film
ドメインの制約の場合)
- 同じ
- エンティティ名。例:
"person"
: 精度を下げた/people/person
型制約"film"
: 精度の低い/film
ドメイン制約
フィルタの制約はいくつかのカテゴリに分類できます。詳しくは、検索クックブックをご覧ください。
フィルタの制約は、SearchRequest
で直接自由に組み合わせたり繰り返したりすることができます。反復フィルタ制約パラメータは、OR クエリに結合されます。さまざまなフィルタ制約パラメータまたはグループが AND クエリに結合されます。
例:
「ゴア」という名前の人や都市を検索する方法は次のとおりです。
query=gore &filter=(any type:/people/person type:/location/citytown)
この結合動作は、フィルタの組み合わせによってより豊富なインターフェースが提供されるフィルタ パラメータでオーバーライドするとともに、より適切に制御することができます。これは s 式です。オプションでネストされ、演算子は次のいずれかになります。
any
(論理的に OR)all
(論理 ANDnot
should
。トップレベルでのみ使用でき、制約がオプションであることを指定します。スコアリングの際、オプションの制約と一致しない一致は、一致しなかった任意の制約ごとにスコアを半分に分割します。
例:
/people/person
タイプまたは /film
ドメインと一致させるには、次の手順をお試しください。
query=gore &filter=(any type:/people/person domain:/film)