खोज अवलोकन

  1. खास जानकारी
  2. सुरक्षा का ध्यान रखना
  3. बेहतर फ़िल्टर

खास जानकारी

Freebase खोज API, फ़्री टेक्स्ट क्वेरी दिए जाने पर Freebase डेटा को ऐक्सेस करता है. क्वेरी के नतीजों को क्रम में लगाया गया है और उनका प्रासंगिकता स्कोर है.

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

डेवलपर, Search API का इस्तेमाल कैसे कर सकते हैं, इसके कुछ उदाहरण यहां दिए गए हैं:

  • अपने-आप सुझाव देने वाली इकाइयां (उदाहरण के लिए, फ़्रीबेस सुझाव विजेट)
  • दिए गए नाम वाली सबसे मशहूर इकाइयों की रैंक की गई सूची पाना.
  • Search मेटास्कीमा का इस्तेमाल करके इकाइयों को ढूंढा जा रहा है.

इस्तेमाल की जा सकने वाली कई भाषाओं में दिए गए कोड सैंपल में, किसी ऐसे कलाकार की खोज करने का तरीका बताया गया है जो “Cee Lo Green” टेक्स्ट से मेल खाता है. इसका एक कंस्ट्रेंट यह है कि उन्होंने “The लेडी 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>

यह देखने के लिए कि आपकी पसंदीदा भाषा उपलब्ध है या नहीं, क्लाइंट लाइब्रेरी पेज भी देखें.

खोज API दस्तावेज़

ये दस्तावेज़ भी देखें:

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

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

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

बेहतर फ़िल्टर

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

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

filter=(any type:/people/person)

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

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

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

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

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

Gore"नाम या लोगों और शहरों को खोजने के लिए, ये आज़माएं:

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

इस मिली-जुली कार्रवाई को बदला जा सकता है और फ़िल्टर पैरामीटर की मदद से बेहतर तरीके से कंट्रोल किया जा सकता है. यह फ़िल्टर कंस्ट्रेंट को मिलाने के लिए एक बेहतर इंटरफ़ेस देता है. यह एक s-expression है, जो आर्बिट्ररी तौर पर नेस्ट किया गया है. इसमें ऑपरेटर इनमें से एक है:

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

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

/people/person या /film डोमेन के नाम से मेल खाने के लिए:

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