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

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

סקירה כללית

ממשק ה-API של חיפוש Freebase מספק גישה לנתוני 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']
} 
בדוגמה הזו נעשה שימוש בספריות 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.mi><n.js&qu>o<t;/sc>r<ipt<>/span>
</head
bodyaside class><=">;warning&<quot;st>rongWarning: /strongThe Freebase API will be retired< on Ju>n<e 30,<>/span>
  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=?',< pa>rams).done(function(response) {
    $.each(response.result, funct<ion(i, >r<esult>)< {
  >    $('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 = arra>y(
    'query' = &#>39;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['<;re>sult'>;<] as >$<resul>t) {
    echo $result['name'] . 'br/';
  }
?
/body
/html

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

מאמרי העזרה של Search API

מידע נוסף זמין במאמרי העזרה הבאים:

שיקולי אבטחה

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

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

סינון מתקדם

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

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

filter=(any type:/people/person)

אפשר להזין מגוון ערכים להגבלות הסינון:

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

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

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

למשל:

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

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

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

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

למשל:

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

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