2015-02-11 2 views
1

Мы заинтересованы в использовании Google Custom Search/Google в нашем проекте, в основном из-за того, что это удивительно при сопряжении &, исправляющих слова с орфографическими ошибками.Google Custom Search - База данных запросов/API?

Мы знаем, что он может возвращать данные в JSON или XML, и мы в порядке с этим. Но найти ответ на вопрос:

Можем ли мы использовать эту коррекцию и коррекцию ошибок и искать нашу собственную базу данных/api?

Если вы напечатали бы drnks with no alcohol он будет автоматически корректно drinks with no alcohol, а затем искать нашу базу данных, как это:

http://example.com?search=drinks&alcohol=0, и он может ответить так:

{ 
    "coke": { 
     "alcohol": 0, 
     "calories": 300, 
     "taste": "awesome" 
    }, 
    "pepsi": { 
     "alcohol": 0, 
     "calories": 300, 
     "taste": "meh" 
    } 
} 

И тогда он вернется эти два результата в той или иной форме.

Решения с использованием платной версии в порядке.

Если это возможно, вы могли бы предоставить мне простой пример?

+0

Нет, на самом деле я этого не делал. Дело в том, что я сторонний разработчик и никогда не использовал REST или Google Custom Search. Мне просто дали задачу разведать об этом. @ AndréDaniel –

+0

Предоставил бы, но у меня его тоже нет. Пока мы не сможем узнать, возможно ли это. –

+0

Да, я пробовал и создал пользовательский механизм поиска, но я почти не знаю, как его использовать. –

ответ

1

Google предоставляет REST API для своего пользовательского поиска, вы можете запросить его со своего сервера, чтобы определить, есть ли лучшее правописание для условий поиска или нет, а затем использовать это для запроса внутренней базы данных.

В моем коде я использую Guzzle, клиентскую библиотеку REST, чтобы избежать страдания с уродливым и подробным кодом cURL, но не стесняйтесь использовать cURL, если вам действительно нужно.

// Composer's autoloader to load the REST client library 
require "vendor/autoload.php"; 

$api_key = "..."; // Google API key, looks like random text 
$search_engine = "..."; // search engine ID, looks like "<numbers>:<text>" 
$query = "drnks with no alcohol"; // the original search query 

// REST client object with some defaults 
// avoids specifying them each time we make a request 
$client = new GuzzleHttp\Client(["base_url" => "https://www.googleapis.com", "defaults" => ["query" => ["key" => $api_key, "cx" => $search_engine, "fields" => "spelling(correctedQuery)"]]]); 

try { 
    // the actual request, with the search query 
    $resp = $client->get("/customsearch/v1", ["query" => ["q" => $query]])->json(); 

    // whether Google suggests an alternative spelling 
    if (isset($resp["spelling"]["correctedQuery"])) { 
     $correctedQuery = $resp["spelling"]["correctedQuery"]; 
     // now use that corrected spelling to query your internal DB 
     // or do anything else really, the query is yours now 
     echo $correctedQuery; 
    } else { 
     // Google doesn't have any corrections, use the original query then 
     echo "No corrections found"; 
    } 
} catch (GuzzleHttp\Exception\TransferException $e) { 
    // Something bad happened, log the exception but act as if 
    // nothing is wrong and process the user's original query 
    echo "Something bad happened"; 
} 

Вот некоторые instructions, чтобы получить ключ API и пользовательского поиска ID может быть получен из control panel.

Если вы посмотрите внимательно, вы можете увидеть, что я задал параметр запроса fields, чтобы запросить partial response только с возможными предложениями по правописанию, чтобы (надеюсь) получить лучшую производительность, поскольку нам ничего не нужно от ответа (но не стесняйтесь изменять/удалять его, если вам нужен полный ответ).

Обратите внимание, что Google не имеет никакого представления о том, что находится в вашей базе данных, поэтому исправления правописания будут основаны только на общедоступных данных, которые Google имеет о вашем веб-сайте, я не думаю, что есть способ информировать Google о вашей внутренней БД , а не то, что это хорошая идея.

И, наконец, обязательно обработайте ограничения по скорости и отказы API, предоставив пользователю возможность поиска по исходному запросу (просто действуйте так, как будто ничего не случилось, и регистрируйте ошибку только для последующего просмотра).

+0

Исправления исправлений, которые Google имеет о английском/финском языках, поскольку языки - это единственные вещи, которые, вероятно, необходимы, любая идея, если это использует их?Это только положительная вещь, если она также захватывает некоторые слова для использования при обходе сайта. –

+0

@ Христианский «ответ принят», я думаю, он (наконец) работал. –