Übersicht über die Suche

  1. Übersicht
  2. Sicherheitsaspekte
  3. Erweiterte Filterung

Übersicht

Die Freebase Search API bietet Zugriff auf Freebase-Daten auf Grundlage einer Freitextanfrage. Die Ergebnisse der Abfrage werden sortiert und haben einen numerischen Relevanzwert.

Entwickler können Filter anwenden, um die Suchergebnisse auf bestimmte Datentypen zu beschränken. Weitere Informationen zum Erstellen detaillierter Suchanfragen finden Sie im Search Cookbook.

Hier einige Beispiele für die Verwendung der Search API durch Entwickler:

Die folgenden Codebeispiele in mehreren unterstützten Sprachen zeigen, wie Sie nach einem Musikkünstler suchen, der dem Text „Cee Lo Green“ entspricht. Eine zusätzliche Einschränkung ist, dass er etwas namens „The Lady Killer“ erstellt hat.

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']
} 
In diesem Beispiel werden die Bibliotheken Httparty und Addressable verwendet.

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

<!DOCTYPE html>
<html>
<head>
    <script src="https://www.gstatic.com/external_hosted/jquery2.min.js"></script>
</head>
<body><aside class="warning"><strong>Warning: </strong>The Freebase API will be retired on June 30,
  2015.</aside>
<script>
  var service_url = 'https://www.googleapis.com/freebase/v1/search';
  var params = {
    'query': 'Cee Lo Green',
    'filter': '(all type:/music/artist created:"The Lady Killer")',
    'limit': 10,
    'indent': true
  };
  $.getJSON(service_url + '?callback=?', params).done(function(response) {
    $.each(response.result, function(i, result) {
      $('<div>', {text:result['name']}).appendTo(document.body);
    });
  });
</script>
</body>
</html>
In diesem Beispiel wird die jQuery-Bibliothek verwendet.

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>

Auf der Seite Clientbibliotheken können Sie nachsehen, ob Ihre bevorzugte Sprache unterstützt wird.

Dokumentation zur Search API

Weitere Informationen finden Sie in der folgenden Dokumentation:

Sicherheitsaspekte

Die Search API indexiert und durchsucht nutzergenerierte Inhalte, die im Freebase-Diagramm gespeichert sind. Das bedeutet, dass Sie die Inhalte auf einer Webseite nicht direkt verwenden können, ohne sie vorher sicher zu escapen.

Weitere Informationen finden Sie unter Erste Schritte: Sicherheit.

Erweiterte Filterung

Die Search API unterstützt eine Vielzahl von Filterbedingungen, um die Suche besser auf die richtigen Einheiten auszurichten.

Mit einer Filterbeschränkung vom Typ „type“ können wir beispielsweise eine Liste der wichtigsten Personen in Freebase anzeigen.

filter=(any type:/people/person)

Für Filterbeschränkungen sind verschiedene Eingaben möglich:

  • Für Menschen lesbare IDs für Schemaentitäten oder Nutzer, z. B.:
    • /people/person für eine Typeinschränkung
    • /film für eine Domäne
  • Beispiele für Freebase-MIDs:
    • /m/01g317 für dieselbe Einschränkung vom Typ /people/person
    • /m/010s für die oben genannte /film-Domaineinschränkung
  • Entitätsnamen, z. B.:
    • "person" für eine weniger genaue Einschränkung des Typs /people/person
    • "film" für eine weniger genaue /film-Domaineinschränkung

Filtereinschränkungen lassen sich in einige Kategorien einteilen. Weitere Informationen finden Sie im Search Cookbook.

Filtereinschränkungen können in der SearchRequest beliebig kombiniert und wiederholt werden. Wiederholte Parameter für Filterbeschränkungen werden in einer ODER-Abfrage kombiniert. Verschiedene Parameter oder Gruppen von Filterbedingungen werden zu einer AND-Abfrage kombiniert.

Beispiel:

Wenn Sie nach „Personen oder Städten mit dem Namen Gore“ suchen möchten, geben Sie Folgendes ein:

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

Dieses Kombinationsverhalten kann mit dem Filterparameter überschrieben und besser gesteuert werden. Dieser bietet eine umfangreichere Schnittstelle zum Kombinieren von Einschränkungen. Es handelt sich um einen S-Ausdruck, der beliebig verschachtelt sein kann. Der Operator ist einer der folgenden:

  • any, logisch ein ODER
  • all, logisch ein UND
  • not
  • should, das nur auf der obersten Ebene verwendet werden kann und angibt, dass die Einschränkung optional ist. Bei der Bewertung wird die Punktzahl von Übereinstimmungen, die nicht den optionalen Einschränkungen entsprechen, für jede optionale Einschränkung, die nicht erfüllt wird, halbiert.

Beispiel:

Wenn Sie nach dem Typ /people/person oder der Domain /film suchen möchten, versuchen Sie Folgendes:

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