Мы заинтересованы в использовании пользовательского поиска Google / Google в нашем проекте, главным образом из-за того, что он удивителен при спряжении & исправление слов с ошибками.
Мы знаем, что он может возвращать данные в формате JSON или XML, и мы в порядке. Но, найдя ответ на вопрос:
Можем ли мы использовать это сопряжение и исправление ошибок и искать нашу собственную базу данных / API?
Если бы вы набрали drnks with no alcohol
это автоматически исправит drinks with no alcohol
и затем выполните поиск в нашей базе данных следующим образом:
http://example.com?search=drinks&спирт = 0, и он может ответить так:
{
"coke": {
"alcohol": 0,
"calories": 300,
"taste": "awesome"},
"pepsi": {
"alcohol": 0,
"calories": 300,
"taste": "meh"}
}
И тогда он вернет эти два результата в некоторой форме.
Решения с использованием платной версии в порядке.
Если это возможно, не могли бы вы привести простой пример?
Google предоставляет REST API для их пользовательского поиска вы можете запросить его с вашего сервера, чтобы определить, есть ли лучшее написание для условий поиска или нет, а затем использовать его для запроса вашей внутренней базы данных.
В моем коде я использую пропивать, клиентская библиотека 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";
}
Вот некоторые инструкции чтобы получить ключ API, и пользовательский идентификатор поисковой системы можно получить из панель управления.
Если вы посмотрите внимательно, вы увидите, что я указал fields
параметр запроса для запроса частичный ответ только с возможными предложениями по орфографии, чтобы (надеюсь) получить лучшую производительность, поскольку нам не нужно ничего больше из ответа (но не стесняйтесь изменять / удалять его, если вам нужен полный ответ).
Обратите внимание, что Google не имеет ни малейшего представления о том, что находится в вашей базе данных, поэтому исправления орфографии будут основываться только на общедоступных данных Google о вашем веб-сайте, я не думаю, что есть способ сообщить Google о вашей внутренней БД, а не то, что хорошая идея в любом случае.
Наконец, убедитесь, что корректно обрабатывает ограничения скорости и сбои API, по-прежнему предоставляя пользователю возможность поиска с использованием своего исходного запроса (просто действуйте так, как будто ничего не случилось, и регистрируйте ошибку только для последующего просмотра).
Других решений пока нет …