نظرة عامة على البحث

  1. نظرة عامة
  2. اعتبارات الأمان
  3. الفلترة المتقدّمة

نظرة عامة

تتيح واجهة Freebase Search API الوصول إلى بيانات Freebase عند تقديم طلب بحث بنص حر. يتم ترتيب نتائج طلب البحث وتتضمّن نتيجة رقمية تحدّد مدى الصلة بالموضوع.

يمكن للمطوّرين تطبيق فلاتر لحصر نتائج البحث بأنواع معيّنة من البيانات. راجِع دليل البحث للحصول على مزيد من المعلومات حول كيفية إنشاء طلبات بحث مفصّلة.

في ما يلي بعض الأمثلة على كيفية استخدام المطوّرين لواجهة برمجة التطبيقات Search API:

  • اقتراح الكيانات تلقائيًا (مثل Freebase Suggest Widget)
  • الحصول على قائمة مرتبة بأبرز الكيانات التي تحمل اسمًا معيّنًا
  • العثور على كيانات باستخدام Search Metaschema

تعرض نماذج الرموز التالية بلغات متعدّدة متوافقة كيفية إجراء بحث عن فنان موسيقي يطابق النص "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.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>

يمكنك أيضًا الاطّلاع على صفحة مكتبات البرامج لمعرفة ما إذا كانت لغتك المفضّلة متوافقة.

مستندات Search API

يمكنك أيضًا الاطّلاع على المستندات التالية:

الاعتبارات الأمنية

تتولّى Search API فهرسة المحتوى من إنشاء المستخدمين والبحث فيه، وهو المحتوى المخزّن في الرسم البياني Freebase. وهذا يعني أنّه لا يمكنك استخدام المحتوى مباشرةً على صفحة ويب بدون إيقاف تفعيله بأمان أولاً.

لمزيد من المعلومات، يُرجى الاطّلاع على البدء: الأمان.

الفلترة المتقدّمة

تتيح Search API عددًا كبيرًا من قيود الفلترة لتوجيه البحث بشكل أفضل إلى العناصر الصحيحة.

على سبيل المثال، باستخدام قيد فلتر "النوع"، يمكننا عرض قائمة بأبرز الشخصيات في Freebase.

filter=(any type:/people/person)

تقبل قيود الفلتر مجموعة متنوعة من الإدخالات:

  • معرّفات قابلة للقراءة من قِبل الإنسان لكيانات المخطط أو المستخدمين، على سبيل المثال:
    • /people/person لقيد نوع
    • /film لقيد النطاق
  • معرّفات Freebase، على سبيل المثال:
    • /m/01g317 لقيد النوع /people/person نفسه
    • /m/010s لقيد النطاق /film أعلاه
  • أسماء الجهات، على سبيل المثال:
    • "person" لقيد نوع /people/person أقل دقة
    • "film" لقيد نطاق /film أقل دقة

يمكن تصنيف قيود الفلتر إلى بضع فئات. لمزيد من التفاصيل، يمكنك الاطّلاع على كتاب وصفات البحث.

يمكن الجمع بين قيود الفلتر وتكرارها بحرية في SearchRequest مباشرةً. يتم دمج مَعلمات قيود الفلتر المتكرّرة في طلب بحث OR. يتم دمج مَعلمات أو مجموعات قيود الفلتر المختلفة في طلب بحث AND.

على سبيل المثال:

للبحث عن "أشخاص أو مدن تحمل اسم غور"، جرِّب ما يلي:

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)