搜尋總覽

  1. 總覽
  2. 安全性考量
  3. 進階篩選

總覽

Freebase Search API 可讓您免費取得存取的文字查詢,存取 Freebase 資料。查詢結果會排序,且具有數值關聯性分數。

開發人員可以套用篩選器,將搜尋結果限制為特定類型的資料。如要進一步瞭解如何建立詳細的搜尋查詢,請參閱搜尋教戰手冊

以下列舉開發人員可能會如何使用 Search API:

以下提供幾種支援語言的程式碼範例,說明如何搜尋與「Cee Lo Green」一詞相符的音樂人。另一個限制是名為「The 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']
} 
這個範例使用 HttpartyAddressable 程式庫。

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 會對使用者產生的內容建立索引並搜尋其內容。也就是說,在未直接逸出的情況下,您就無法直接使用網頁上的內容。

詳情請參閱「開始使用:安全性」。

進階篩選

Search API 支援大量篩選器限制,以便更精準地搜尋適當的實體。

例如,使用「類型」篩選器限制,我們可顯示 Freebase 中最值得注意的對象清單。

filter=(any type:/people/person)

篩選器限制可接受多種輸入值:

  • 使用者可理解的結構定義實體或使用者 ID,例如:
    • 類型限制的 /people/person
    • 網域限制的 /film
  • Freebase MID,例如:
    • 相同 /people/person 類型限制條件的 /m/01g317
    • 上述 /film 網域限制的 /m/010s
  • 實體名稱,例如:
    • "person" 用於較精確的 /people/person 類型限制
    • "film" 可提供更精細的 /film 網域限制

篩選器限制可分為幾個類別。詳情請參閱搜尋教戰手冊

可以直接在 SearchRequest 中自由合併並篩選篩選器限制。系統會將重複的篩選器限制參數合併為「或」查詢。系統會將不同的篩選器限制參數或群組合併為 AND 查詢。

例如:

如要搜尋「Gore」的人物或城市,請嘗試:

query=gore
&filter=(any type:/people/person type:/location/citytown)

您可以利用篩選參數覆寫這個合併行為,並進一步控管篩選器參數,以提供更豐富的組合來合併限制。這是一種 s 運算式 (可能為任意巢狀),其中運算子為以下其中一種:

  • any (邏輯方式為 OR)
  • all,邏輯運算子為「AND」
  • not
  • should,只能在頂層使用,代表限制條件。在計分期間,不符合選用限制的相符項目會以分數分隔為無法配對的每項選用限制條件的一半。

例如:

如要比對 /people/person 類型或 /film 網域,請嘗試以下做法:

query=gore
&filter=(any type:/people/person domain:/film)