Übersicht über die Suche

  1. Übersicht
  2. Überlegungen zur Sicherheit
  3. Erweiterte Filterung

Übersicht

Die Freebase Search API bietet Zugriff auf Freebase-Daten bei einer Freitextabfrage. Die Ergebnisse der Abfrage sind geordnet 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 Cookbook zur Suche.

Hier sind einige Beispiele dafür, wie Entwickler die Search API verwenden können:

Die folgenden Codebeispiele in mehreren unterstützten Sprachen zeigen, wie eine Suche nach einem Musiker durchgeführt wird, der mit dem Text „Cee Lo Green“ übereinstimmt. Eine zusätzliche Einschränkung besteht darin, dass er eine Datei 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>

Sehen Sie auf der Seite Clientbibliotheken nach, ob Ihre bevorzugte Sprache unterstützt wird.

Search API-Dokumentation

Weitere Informationen finden Sie in der folgenden Dokumentation:

Sicherheitsaspekte

Die Search API indexiert und durchsucht von Nutzern erstellte Inhalte, die in der Freebase-Grafik gespeichert sind. Das bedeutet, dass Sie den Inhalt auf einer Webseite nicht direkt verwenden können, ohne zuerst sicher zu entkommen.

Weitere Informationen finden Sie unter Erste Schritte: Sicherheit.

Erweiterte Filterung

Die Search API unterstützt eine Vielzahl von Filtereinschränkungen, um die Suche besser auf die richtigen Entitäten auszurichten.

Wenn wir beispielsweise die Filtereinschränkung „Typ“ verwenden, können wir eine Liste der bekanntesten Personen in Freebase anzeigen.

filter=(any type:/people/person)

Für Filtereinschrä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 Domaineinschränkung
  • Freebase-MIDs, z. B.:
    • /m/01g317 für dieselbe Einschränkung des Typs /people/person
    • /m/010s für die oben angegebene Domaineinschränkung /film
  • Namen von Entitäten, z. B.:
    • "person" für eine weniger genaue Einschränkung des Typs /people/person
    • "film" für eine weniger genaue Domaineinschränkung für /film

Filtereinschränkungen können in verschiedene Kategorien eingeteilt werden. Weitere Informationen findest du im Cookbook zur Suche.

Filtereinschränkungen können direkt in SearchRequest kombiniert und wiederholt werden. Wiederholte Filtereinschränkungsparameter werden in einer ODER-Abfrage kombiniert. Verschiedene Filtereinschränkungsparameter oder -gruppen werden in einer UND-Abfrage kombiniert.

Beispiel:

Wenn Sie nach Personen oder Städten mit dem Namen Gore suchen möchten, versuchen Sie Folgendes:

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

Dieses Kombinationsverhalten kann überschrieben und besser mit dem Filterparameter gesteuert werden, der eine umfassendere Schnittstelle zur Kombination von Einschränkungen bietet. Hierbei handelt es sich um einen s-Ausdruck, der möglicherweise beliebig verschachtelt ist, wobei der Operator entweder

  • any, logisch ODER
  • all, logisch UND
  • not
  • should, die nur auf oberster Ebene verwendet werden kann. Sie gibt an, dass die Einschränkung optional ist. Während der Bewertung wird die Punktzahl von Übereinstimmungen, die nicht mit optionalen Einschränkungen übereinstimmen, für jede optionale Einschränkung, die sie nicht erfüllen, halbiert.

Beispiel:

Für den Abgleich mit dem Typ /people/person oder der Domain /film versuchen Sie Folgendes:

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