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

  1. Tổng quan
  2. Những điều cần cân nhắc về bảo mật
  3. Lọc nâng cao

Tổng quan

API Tìm kiếm cơ sở miễn phí cung cấp quyền truy cập vào dữ liệu Freebase khi được truy vấn văn bản miễn phí. Kết quả truy vấn được sắp xếp theo thứ tự và có điểm số về mức độ liên quan.

Nhà phát triển có thể áp dụng các bộ lọc để ràng buộc kết quả tìm kiếm đối với một số loại dữ liệu nhất định. Hãy xem Sách hướng dẫn 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.

Một số ví dụ về cách nhà phát triển có thể muốn sử dụng API Tìm kiếm:

Các mã mẫu sau đây bằng một số ngôn ngữ được hỗ trợ cho thấy cách tìm kiếm nghệ sĩ âm nhạc phù hợp với văn bản "Cee Lo Green". Điều kiện ràng buộc bổ sung là họ đã tạo ra một video 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 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>

Ngoài ra, hãy xem trang Thư viện ứng dụng để xem ngôn ngữ bạn yêu thích có được hỗ trợ hay không.

Tìm tài liệu về API

Ngoài ra, hãy xem tài liệu sau:

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

API Tìm kiếm 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 khỏi nội dung đó một cách an toàn trước.

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

Lọc nâng cao

API Tìm kiếm hỗ trợ một số lượng lớn các hạn chế về bộ lọc để nhắm mục tiêu tìm kiếm chính xác hơn vào các thực thể chính xác.

Ví dụ: sử dụng quy tắc ràng buộc bộ lọc "type", chúng tôi có thể hiển thị danh sách những người đáng chú ý nhất trong Freebase.

filter=(any type:/people/person)

Các hạn chế về bộ lọc chấp nhận nhiều 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ể hoặc người dùng trong giản đồ, ví dụ:
    • /people/person cho một hạn chế về loại
    • /film cho một hạn chế miền
  • MID Freebase, ví dụ:
    • /m/01g317 cho cùng một hạn chế loại /people/person
    • /m/010s cho điều kiện ràng buộc miền /film ở trên
  • Tên thực thể, ví dụ:
    • "person" cho điều kiện ràng buộc loại /people/person ít chính xác hơn
    • "film" cho hạn chế miền /film chính xác hơn

Các hạn chế về bộ lọc có thể được phân loại thành một số danh mục. Hãy xem Tìm kiếm Sổ tay nấu ăn để biết thêm thông tin chi tiết.

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

Ví dụ:

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

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

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

  • any, theo hàm logic OR
  • all, theo hàm logic AND
  • not
  • should, chỉ có thể được sử dụng ở cấp cao nhất và biểu thị rằng điều kiện ràng buộc là không bắt buộc. Trong quá trình chấm điểm, các kết quả trùng 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ẽ được chia một nửa cho mỗi quy tắc ràng buộc (không bắt buộc).

Ví dụ:

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

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