Tổng quan về tìm kiếm

  1. Tổng quan
  2. Lưu ý về bảo mật
  3. Lọc nâng cao

Tổng quan

Freebase Search API cung cấp quyền truy cập vào dữ liệu trên Freebase dựa trên một cụm từ tìm kiếm bằng văn bản tự do. Kết quả của truy vấn được sắp xếp và có điểm số mức độ liên quan bằng số.

Nhà phát triển có thể áp dụng bộ lọc để giới hạn kết quả tìm kiếm ở một số loại dữ liệu nhất định. Hãy xem Sổ tay tìm kiếm để biết thêm thông tin về cách tạo các cụm từ tìm kiếm chi tiết.

Sau đây là một số ví dụ về cách nhà phát triển có thể sử dụng Search API:

Các mẫu mã sau đây bằng một số ngôn ngữ được hỗ trợ cho biết cách thực hiện tìm kiếm một nghệ sĩ âm nhạc khớp với văn bản "Cee Lo Green". Một ràng buộc bổ sung là họ đã tạo ra một tác phẩm có tên là "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']
} 
Ví dụ này sử dụng các thư viện HttpartyAddressable.

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>
Ví dụ này sử dụng thư viện 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>

Bạn cũng có thể xem trang Thư viện ứng dụng để biết ngôn ngữ bạn yêu thích có được hỗ trợ hay không.

Tài liệu về Search API

Hãy xem thêm tài liệu sau:

Lưu ý về bảo mật

Search API lập chỉ mục và tìm kiếm nội dung do người dùng tạo được lưu trữ trong biểu đồ Freebase. Điều này có nghĩa là bạn không thể trực tiếp sử dụng nội dung trên một trang web mà không thoát nội dung đó một cách an toàn trước.

Hãy xem phần Bắt đầu: Bảo mật để biết thêm thông tin.

Lọc nâng cao

Search API hỗ trợ nhiều điều kiện ràng buộc bộ lọc để nhắm mục tiêu tìm kiếm vào đúng thực thể.

Ví dụ: bằng cách sử dụng một ràng buộc bộ lọc "type", chúng ta có thể hiển thị danh sách những người nổi tiếng nhất trong Freebase.

filter=(any type:/people/person)

Các điều kiện ràng buộc của bộ lọc chấp nhận nhiều loại dữ liệu đầu vào:

  • Mã nhận dạng mà con người có thể đọc được cho các thực thể lược đồ hoặc người dùng, ví dụ:
    • /people/person cho một hạn chế về loại
    • /film cho một ràng buộc về miền
  • Ví dụ: MID của Freebase:
    • /m/01g317 cho cùng một ràng buộc về loại /people/person
    • /m/010s cho ràng buộc về miền /film nêu trên
  • Tên pháp nhân, ví dụ:
    • "person" cho một ràng buộc loại /people/person ít chính xác hơn
    • "film" cho ràng buộc miền /film ít chính xác hơn

Bạn có thể phân loại các điều kiện ràng buộc của bộ lọc thành một số danh mục. Hãy xem Sổ tay tìm kiếm để biết thêm thông tin chi tiết.

Bạn có thể tuỳ ý kết hợp và lặp lại các ràng buộc bộ lọc trong SearchRequest. Các tham số ràng buộc bộ lọc lặp lại được kết hợp thành một truy vấn OR. Các tham số hoặc nhóm ràng buộc bộ lọc khác nhau được kết hợp thành một truy vấn AND.

Ví dụ:

Để tìm "người hoặc thành phố có tên là Gore", hãy thử:

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

Bạn có thể ghi đè và kiểm soát tốt hơn hành vi kết hợp này bằng tham số bộ lọc. Tham số này cung cấp một giao diện phong phú hơn để kết hợp các điều kiện ràng buộc. Đây là một biểu thức s, có thể được lồng tuỳ ý, trong đó toán tử là một trong những toán tử sau:

  • any, theo logic là HOẶC
  • all, về mặt logic là AND
  • not
  • should, chỉ có thể dùng ở cấp cao nhất và cho biết rằng điều kiện ràng buộc là không bắt buộc. Trong quá trình tính điểm, những kết quả khớp không khớp với các điều kiện ràng buộc không bắt buộc sẽ bị giảm một nửa điểm cho mỗi điều kiện ràng buộc không bắt buộc mà chúng không khớp.

Ví dụ:

Để so khớp theo loại /people/person hoặc miền /film, hãy thử:

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