खोज अवलोकन

  1. खास जानकारी
  2. सुरक्षा से जुड़ी बातें
  3. ऐडवांस फ़िल्टरिंग

खास जानकारी

Freebase Search API, बिना स्ट्रक्चर वाली टेक्स्ट क्वेरी के आधार पर Freebase का डेटा ऐक्सेस करने की सुविधा देता है. क्वेरी के नतीजों को क्रम से लगाया जाता है और उनमें संख्या के हिसाब से काम का स्कोर होता है.

डेवलपर, खोज के नतीजों को कुछ खास तरह के डेटा तक सीमित करने के लिए, फ़िल्टर लागू कर सकते हैं. ज़्यादा जानकारी के लिए, Search Cookbook देखें. इसमें खोज क्वेरी को ज़्यादा जानकारी के साथ बनाने का तरीका बताया गया है.

डेवलपर, 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 के रेफ़रंस दस्तावेज़ देखें.
  • ज़्यादा जानकारी के लिए, Search Cookbook देखें. इसमें खोज क्वेरी को ज़्यादा जानकारी के साथ बनाने का तरीका बताया गया है.
  • इकाइयों और प्रॉपर्टी के बीच के संबंधों के बारे में जानने के लिए, Search Metaschema document देखें.

सुरक्षा से जुड़ी बातें

Search API, Freebase ग्राफ़ में सेव किए गए यूज़र जनरेटेड कॉन्टेंट को इंडेक्स करता है और उसे खोजता है. इसका मतलब है कि किसी वेब पेज पर मौजूद कॉन्टेंट का इस्तेमाल सीधे तौर पर नहीं किया जा सकता. इसके लिए, पहले उसे सुरक्षित तरीके से एस्केप करना होगा.

ज़्यादा जानकारी के लिए, शुरू करना: सुरक्षा लेख पढ़ें.

ऐडवांस फ़िल्टरिंग

Search API, फ़िल्टर से जुड़ी कई पाबंदियों के साथ काम करता है. इससे सही इकाइयों को खोजने में मदद मिलती है.

उदाहरण के लिए, "टाइप" फ़िल्टर की शर्त का इस्तेमाल करके, हम Freebase में सबसे ज़्यादा मशहूर लोगों की सूची दिखा सकते हैं.

filter=(any type:/people/person)

फ़िल्टर की पाबंदियों में कई तरह के इनपुट स्वीकार किए जाते हैं:

  • स्कीमा इकाइयों या उपयोगकर्ताओं के लिए, इंसानों के पढ़ने लायक आईडी. उदाहरण के लिए:
    • टाइप कंस्ट्रेंट के लिए /people/person
    • /film के लिए डोमेन कंस्ट्रेंट
  • Freebase के एमआईडी, उदाहरण के लिए:
    • /people/person टाइप की एक जैसी शर्त के लिए /m/01g317
    • ऊपर दिए गए /film डोमेन कंस्ट्रेंट के लिए /m/010s
  • इकाई के नाम, जैसे कि:
    • /people/person का इस्तेमाल, /people/person टाइप की कम सटीक जानकारी देने वाली शर्त के लिए किया जाता है"person"
    • "film" का इस्तेमाल, /film डोमेन कंस्ट्रेंट के लिए किया जाता है

फ़िल्टर की शर्तों को कुछ कैटगरी में बांटा जा सकता है. ज़्यादा जानकारी के लिए, Search Cookbook देखें.

फ़िल्टर की शर्तों को SearchRequest में सीधे तौर पर जोड़ा और दोहराया जा सकता है. फ़िल्टर की शर्त के दोहराए गए पैरामीटर को OR क्वेरी में शामिल किया जाता है. फ़िल्टर की शर्तों के अलग-अलग पैरामीटर या ग्रुप को AND क्वेरी में शामिल किया जाता है.

उदाहरण के लिए:

"गोर नाम के लोग या शहर" खोजने के लिए, यह तरीका अपनाएं:

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

इस कॉम्बिनेशन के व्यवहार को बदला जा सकता है. साथ ही, फ़िल्टर पैरामीटर की मदद से इसे बेहतर तरीके से कंट्रोल किया जा सकता है. यह पैरामीटर, शर्तों को एक साथ इस्तेमाल करने के लिए बेहतर इंटरफ़ेस उपलब्ध कराता है. यह एक एस-एक्सप्रेशन है, जिसे किसी भी क्रम में नेस्ट किया जा सकता है. इसमें ऑपरेटर इनमें से कोई एक होता है:

  • any, लॉजिक के हिसाब से OR
  • all, लॉजिक के हिसाब से AND
  • not
  • should का इस्तेमाल सिर्फ़ टॉप लेवल पर किया जा सकता है. इससे पता चलता है कि यह शर्त ज़रूरी नहीं है. स्कोरिंग के दौरान, जिन मैचों में वैकल्पिक शर्तों का पालन नहीं किया जाता है उनके स्कोर को आधा कर दिया जाता है. ऐसा हर उस वैकल्पिक शर्त के लिए किया जाता है जिसका पालन नहीं किया गया है.

उदाहरण के लिए:

/people/person टाइप या /film डोमेन के हिसाब से मिलान करने के लिए, यह तरीका अपनाएं:

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