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, предоставив пользователю возможность поиска по исходному запросу (просто действуйте так, как будто ничего не случилось, и регистрируйте ошибку только для последующего просмотра).
Нет, на самом деле я этого не делал. Дело в том, что я сторонний разработчик и никогда не использовал REST или Google Custom Search. Мне просто дали задачу разведать об этом. @ AndréDaniel –
Предоставил бы, но у меня его тоже нет. Пока мы не сможем узнать, возможно ли это. –
Да, я пробовал и создал пользовательский механизм поиска, но я почти не знаю, как его использовать. –