סקירה כללית על חיפוש

  1. סקירה כללית
  2. שיקולי אבטחה
  3. סינון מתקדם

סקירה כללית

ה-Freebase Search API מספק גישה לנתוני Freebase בהתאם לשאילתת טקסט חופשי. תוצאות השאילתה מסודרות ועם ציון רלוונטיות מספרי.

מפתחים יכולים להחיל מסננים כדי להגביל את תוצאות החיפוש לסוגים מסוימים של נתונים. לקבלת מידע נוסף על היצירה של שאילתות חיפוש מפורטות, ניתן לעיין באוסף הפתרונות.

דוגמאות למוצרים שבהם מפתחים רוצים להשתמש ב-Search API:

  • ישויות בהצעה אוטומטית (למשל ווידג'ט Freebase Offer)
  • קבלת רשימה מדורגת של הישויות הבולטות ביותר שקיבלו שם נתון.
  • חיפוש ישויות באמצעות Search Metaschema.

בדוגמאות הקוד הבאות, בכמה שפות נתמכות, מוסבר איך לבצע חיפוש של מוזיקאי שתואם לטקסט "Cee Lo Green". מגבלה נוספת היא שהן יצרו משהו בשם "The Lill 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']
} 
בדוגמה הזו נעשה שימוש בספריות Httparty ו-Addressable.

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>
בדוגמה הזו נעשה שימוש בספרייה של 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>

אפשר גם להיכנס לדף ספריות לקוח כדי לבדוק אם השפה המועדפת עליך נתמכת.

חיפוש API של חיפוש

בנוסף, מומלץ לעיין במסמכים הבאים:

שיקולי אבטחה

ה-API של החיפוש מוסיף לאינדקס ומחפש תוכן של משתמשים שנשמר בתרשים Freebase. המשמעות היא שלא ניתן להשתמש בתוכן באופן ישיר בדף אינטרנט בלי לצאת ממנו בבטחה.

מידע נוסף זמין בקטע תחילת העבודה: אבטחה.

סינון מתקדם

ה-API של החיפוש תומך במספר גדול של אילוצי מסננים כדי לכוון את החיפוש טוב יותר לישויות הנכונות.

לדוגמה, באמצעות אילוץ מסנן "type" , אנחנו יכולים להציג רשימה של האנשים הבולטים ביותר ב-Freebase.

filter=(any type:/people/person)

אילוצי סינון מקבלים מגוון קלט:

  • מזהים שניתן לקרוא על ידי אנשים של ישויות או משתמשים בסכימה, לדוגמה:
    • /people/person עקב אילוץ של סוג
    • /film עקב מגבלה של דומיין
  • MIDS מסוג Freebase, לדוגמה:
    • /m/01g317 עבור אותה מגבלה מסוג /people/person
    • /m/010s עבור אילוץ הדומיין /film שלמעלה
  • שמות ישויות, לדוגמה:
    • "person" למגבלה של פחות /people/person
    • "film" עקב אילוץ של /film דומיין פחות מדויק

אילוצי סינון ניתן לסווג לכמה קטגוריות. לקבלת פרטים נוספים, ניתן לעיין באוסף הפתרונות של חיפוש Google.

ניתן לשלב את מגבלות האילוץ באופן חופשי ולבצע אותן ישירות ב-SearchRequest. פרמטרים חוזרים של אילוץ מסנן משולבים בשאילתת OR. פרמטרים שונים של אילוץ מסנן או קבוצות משולבים בשאילתת AND.

למשל:

כדי לחפש "אנשים או ערים בשם Gore", נסה:

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

אפשר לשנות את התנהגות השילוב הזו ולשלוט טוב יותר עם פרמטר המסנן, שמספק ממשק עשיר יותר לשילוב אילוצים. זהו ביטוי s, שעשוי להיות שרירותי, שבו האופרטור הוא אחד מהבאים:

  • any, באופן הגיוני OR
  • all, מבחינה לוגית
  • not
  • should. אפשר להשתמש בו רק ברמה העליונה, והמשמעות שלו היא שהאילוץ הוא אופציונלי. במהלך הניקוד, התאמות שלא תואמות למגבלות אופציונליות יתחלקו בחצי עבור כל אילוץ אופציונלי שהן לא יתאימו.

למשל:

כדי להתאים לסוג /people/person או לדומיין /film, יש לנסות:

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