{"id":59503,"date":"2023-10-15T10:24:33","date_gmt":"2023-10-15T13:24:33","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=59503&#038;preview=true&#038;preview_id=59503"},"modified":"2023-10-24T03:09:04","modified_gmt":"2023-10-24T06:09:04","slug":"laravel-scout","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/","title":{"rendered":"Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo"},"content":{"rendered":"<p>O <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-laravel\/\">framework Laravel<\/a> se tornou um recurso essencial para desenvolvedores que criam servi\u00e7os web. Como uma ferramenta de c\u00f3digo aberto, ele oferece uma infinidade de funcionalidades prontas para uso que permitem criar aplicativos robustos e funcionais.<\/p>\n<p>Uma delas \u00e9 o <a href=\"https:\/\/laravel.com\/docs\/9.x\/scout\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Scout<\/a>, uma biblioteca para gerenciar os \u00edndices de pesquisa do seu aplicativo. Sua flexibilidade permite configura\u00e7\u00f5es detalhadas, bem como selecionar entre os drivers Algolia, Meilisearch, MySQL ou <a href=\"https:\/\/sevalla.com\/database-hosting\/\">Postgres<\/a> para armazenar os \u00edndices.<\/p>\n<p>Aqui exploraremos essa ferramenta em profundidade, ensinando voc\u00ea a adicionar ao seu aplicativo Laravel o suporte \u00e0 pesquisa de texto completo por meio do driver. Voc\u00ea modelar\u00e1 um aplicativo Laravel de demonstra\u00e7\u00e3o para armazenar nomes de maquetes de trens, e ent\u00e3o usar\u00e1 o Laravel Scout para adicionar uma pesquisa ao aplicativo.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Pr\u00e9-requisitos<\/h2>\n<p>Para acompanhar, voc\u00ea deve ter:<\/p>\n<ul>\n<li>O compilador PHP instalado em seu computador. Este tutorial usa a vers\u00e3o 8.1 do PHP<\/li>\n<li>O mecanismo Docker ou o Docker Desktop instalado em seu computador<\/li>\n<li>Uma conta de nuvem <a href=\"http:\/\/algolia.com\" target=\"_blank\" rel=\"noopener noreferrer\">Algolia<\/a>, que voc\u00ea pode criar gratuitamente<\/li>\n<\/ul>\n\n<h2>Como instalar o Scout em um projeto Laravel<\/h2>\n<p>Para usar o Scout, voc\u00ea deve primeiro criar o aplicativo Laravel ao qual pretende adicionar a funcionalidade de pesquisa. O script Laravel-Scout Bash cont\u00e9m os comandos para gerar um aplicativo Laravel em um container Docker. Usar o Docker significa que voc\u00ea n\u00e3o precisa instalar software de suporte adicional, como um banco de dados MySQL.<\/p>\n<p>O script Laravel-Scout usa a linguagem de script Bash, portanto, voc\u00ea deve execut\u00e1-lo em um ambiente Linux. Se estiver no Windows, certifique-se de <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/install\" target=\"_blank\" rel=\"noopener noreferrer\">configurar<\/a> o Windows Subsystem for Linux (WSL).<\/p>\n<p>Para isso, <span style=\"font-size: 1rem\">execute o seguinte comando em seu terminal para definir a distribui\u00e7\u00e3o Linux de sua prefer\u00eancia.<\/span><\/p>\n<pre><code class=\"language-bash\">wsl -s ubuntu<\/code><\/pre>\n<p>Em seguida, navegue at\u00e9 o local em seu computador onde voc\u00ea gostaria de colocar o projeto. O script Laravel-Scout gerar\u00e1 um diret\u00f3rio de projeto aqui. No exemplo abaixo, o script Laravel-Scout criaria um diret\u00f3rio dentro da pasta <strong>\u00c1rea de Trabalho<\/strong>.<\/p>\n<pre><code class=\"language-bash\">cd \/desktop<\/code><\/pre>\n<p>Execute o comando abaixo para executar o script Laravel-Scout. Ele gerar\u00e1 um aplicativo Dockerizado com o c\u00f3digo padr\u00e3o necess\u00e1rio.<\/p>\n<pre><code class=\"language-bash\">curl -s https:\/\/laravel.build\/laravel-scout-app | bash<\/code><\/pre>\n<p>Ap\u00f3s a execu\u00e7\u00e3o, altere seu diret\u00f3rio usando <code>cd laravel-scout-app<\/code>. Em seguida, execute o comando <code>sail-up<\/code> na pasta do projeto para iniciar os cont\u00eaineres do Docker para o seu aplicativo.<\/p>\n<p><strong>Observa\u00e7\u00e3o:<\/strong> em muitas distribui\u00e7\u00f5es Linux, talvez voc\u00ea precise executar o comando abaixo com o comando <code>sudo<\/code> para iniciar privil\u00e9gios elevados.<\/p>\n<pre><code class=\"language-bash\">.\/vendor\/bin\/sail up<\/code><\/pre>\n<p>Voc\u00ea pode encontrar um erro:<\/p>\n<figure style=\"width: 307px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/1-port-allocated-error-1.png\" alt=\"Erro afirmando que a porta est\u00e1 alocada.\" width=\"307\" height=\"19\"><figcaption class=\"wp-caption-text\">Erro afirmando que a porta est\u00e1 alocada.<\/figcaption><\/figure>\n<p>Para resolver isso, use a vari\u00e1vel <code>APP_PORT<\/code> para especificar uma porta no comando <code>sail up<\/code>:<\/p>\n<pre><code class=\"language-bash\">APP_PORT=3001 .\/vendor\/bin\/sail up<\/code><\/pre>\n<p>Em seguida execute o comando abaixo para executar o aplicativo por meio do Artisan no servidor PHP.<\/p>\n<pre><code class=\"language-bash\">php artisan serve<\/code><\/pre>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/laravel-with-artisan.png\" alt=\"Servindo o aplicativo Laravel com o Artisan.\" width=\"1600\" height=\"387\"><figcaption class=\"wp-caption-text\">Servindo o aplicativo Laravel com o Artisan.<\/figcaption><\/figure>\n<p>No seu navegador, v\u00e1 at\u00e9 o aplicativo em execu\u00e7\u00e3o em http:\/\/127.0.0.1:8000. O aplicativo exibir\u00e1 a p\u00e1gina de boas-vindas do Laravel na rota padr\u00e3o.<\/p>\n<figure style=\"width: 1328px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/laravel-application-welcome-page.png\" alt=\"P\u00e1gina de boas-vindas do aplicativo Laravel.\" width=\"1328\" height=\"900\"><figcaption class=\"wp-caption-text\">P\u00e1gina de boas-vindas do aplicativo Laravel.<\/figcaption><\/figure>\n<h2>Como adicionar o Laravel Scout ao aplicativo<\/h2>\n<p>No terminal, digite o comando para ativar o gerenciador de pacotes PHP <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a> para adicionar o Laravel Scout ao projeto.<\/p>\n<pre><code class=\"language-bash\">composer require laravel\/scout<\/code><\/pre>\n<p>A seguir publique o arquivo de configura\u00e7\u00e3o do Scout usando o comando vendor:publish. O comando publicar\u00e1 o arquivo de configura\u00e7\u00e3o <code>scout.php<\/code> no diret\u00f3rio <strong>config<\/strong>\u00a0do seu aplicativo.<\/p>\n<pre><code class=\"language-bash\"> php artisan vendor:publish --provider=\"LaravelScoutScoutServiceProvider\"<\/code><\/pre>\n<p>Agora modifique o arquivo <strong>.env<\/strong> padr\u00e3o para que contenha um valor booleano <code>SCOUT_QUEUE<\/code>.<\/p>\n<p>Esse valor permitir\u00e1 que o Scout coloque as opera\u00e7\u00f5es em fila, propiciando melhores tempos de resposta. Sem ele, os drivers do Scout, como o <a href=\"https:\/\/www.meilisearch.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Meilisearch<\/a>, n\u00e3o refletir\u00e3o novos registros imediatamente.<\/p>\n<pre><code class=\"language-bash\">SCOUT_QUEUE=true<\/code><\/pre>\n<p>Al\u00e9m disso, modifique a vari\u00e1vel <code>DB_HOST<\/code> no arquivo <strong>.env<\/strong> para apontar para o seu host local e usar o <a href=\"https:\/\/kinsta.com\/pt\/blog\/sqlite-vs-mysql\/\">banco de dados MySQL<\/a> nos cont\u00eaineres Docker.<\/p>\n<pre><code class=\"language-bash\">DB_HOST=127.0.0.1<\/code><\/pre>\n<h2>Como marcar um modelo e configurar o \u00edndice<\/h2>\n<p>O Scout n\u00e3o habilita modelos de dados pesquis\u00e1veis por padr\u00e3o. Voc\u00ea deve marcar explicitamente um modelo como pesquis\u00e1vel usando a trait <code>LaravelScoutSearchable<\/code>.<\/p>\n<p>Comece criando um modelo de dados para um aplicativo de demonstra\u00e7\u00e3o <code>Train<\/code> e marcando-o como pesquis\u00e1vel.<\/p>\n<h3>Como criar um modelo<\/h3>\n<p>Para o aplicativo <code>Train<\/code>, voc\u00ea dever\u00e1 reservar o espa\u00e7o para os nomes de cada train dispon\u00edvel.<\/p>\n<p>Execute o comando do Artisan abaixo para gerar a migra\u00e7\u00e3o e d\u00ea a ela o nome de <code>create_trains_table<\/code>.<\/p>\n<pre><code class=\"language-bash\">php artisan make:migration create_trains_table <\/code><\/pre>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/migration-created.png\" alt=\"Criando uma migra\u00e7\u00e3o chamada create_trains_table.\" width=\"1600\" height=\"145\"><figcaption class=\"wp-caption-text\">Criando uma migra\u00e7\u00e3o chamada create_trains_table.<\/figcaption><\/figure>\n<p>A migra\u00e7\u00e3o ser\u00e1 gerada em um arquivo cujo nome combina o nome especificado e o timestamp.<\/p>\n<p>Abra o arquivo de migra\u00e7\u00e3o localizado no diret\u00f3rio <strong>database\/migrations\/<\/strong>.<\/p>\n<p>Para adicionar uma coluna de t\u00edtulo, adicione o seguinte c\u00f3digo ap\u00f3s a coluna <code>id()<\/code> na linha 17. O c\u00f3digo adicionar\u00e1 uma coluna de t\u00edtulo.<\/p>\n<pre><code class=\"language-php\">$table-&gt;string('title');<\/code><\/pre>\n<p>Para aplicar a migra\u00e7\u00e3o, execute o comando abaixo.<\/p>\n<pre><code class=\"language-bash\">php artisan migrate<\/code><\/pre>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/artisan-migration.png\" alt=\"Aplicando a migra\u00e7\u00e3o do Artisan.\" width=\"1600\" height=\"335\"><figcaption class=\"wp-caption-text\">Aplicando a migra\u00e7\u00e3o do Artisan.<\/figcaption><\/figure>\n<p>Ap\u00f3s executar as migra\u00e7\u00f5es do banco de dados, crie um arquivo chamado <strong>Train.php<\/strong> no diret\u00f3rio <strong>app\/Models\/<\/strong>.<\/p>\n<h3>Como adicionar a trait LaravelScoutSearchable<\/h3>\n<p>Marque o modelo <code>Train<\/code> para pesquisa adicionando a trait <code>LaravelScoutSearchable<\/code> ao modelo, conforme mostrado abaixo.<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppModels;\nuse IlluminateDatabaseEloquentModel;\nuse LaravelScoutSearchable;\n\nclass Train extends Model\n{\n    use Searchable;\n    public $fillable = ['title'];<\/code><\/pre>\n<p>Al\u00e9m disso, voc\u00ea precisa configurar os \u00edndices de pesquisa substituindo o m\u00e9todo <code>searchable<\/code>. O comportamento padr\u00e3o do Scout manteria o modelo para corresponder ao nome da tabela do modelo.<\/p>\n<p>Portanto, adicione o seguinte c\u00f3digo ao arquivo <strong>Train.php<\/strong> abaixo do c\u00f3digo do bloco anterior.<\/p>\n<pre><code class=\"language-php\">\/**\n     * Retrieve the index name for the model.\n     *\n     * @return string\n    *\/\n    public function searchableAs()\n    {\n        return 'trains_index';\n   }\n}<\/code><\/pre>\n<h2>Como usar o Algolia com o Scout<\/h2>\n<p>Para a primeira pesquisa de texto completo com o Laravel Scout, voc\u00ea usar\u00e1 o driver <a href=\"https:\/\/www.algolia.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Algolia<\/a>, uma plataforma de software como servi\u00e7o (SaaS) usada para pesquisar grandes quantidades de dados. Ele fornece um painel da web para que os desenvolvedores gerenciem seus \u00edndices de pesquisa e uma API robusta que voc\u00ea pode acessar por meio de um kit de desenvolvimento de software (SDK) em sua linguagem de programa\u00e7\u00e3o preferida.<\/p>\n<p>No aplicativo Laravel, voc\u00ea usar\u00e1 o <a href=\"https:\/\/github.com\/algolia\/algoliasearch-client-php\" target=\"_blank\" rel=\"noopener noreferrer\">pacote do cliente<\/a> Algolia para PHP.<\/p>\n<h3>Como configurar o Algolia<\/h3>\n<p>Primeiro, voc\u00ea deve instalar o <a href=\"https:\/\/github.com\/algolia\/algoliasearch-client-php\" target=\"_blank\" rel=\"noopener noreferrer\">pacote do cliente de pesquisa PHP<\/a> do Algolia para o seu aplicativo.<\/p>\n<p>Execute o comando abaixo.<\/p>\n<pre><code class=\"language-bash\">composer require algolia\/algoliasearch-client-php<\/code><\/pre>\n<p>Em seguida, voc\u00ea deve definir o ID do aplicativo e as credenciais da chave secreta da API do Algolia no arquivo <strong>.env<\/strong>.<\/p>\n<p>Usando o navegador, v\u00e1 at\u00e9 o painel do Algolia para obter o ID do aplicativo e as credenciais da chave secreta da API.<\/p>\n<p>Clique em <strong>Settings <\/strong>(Configura\u00e7\u00f5es) na parte inferior da barra lateral esquerda para navegar at\u00e9 a p\u00e1gina <strong>Settings<\/strong>.<\/p>\n<p>Em seguida, clique em <strong>API Keys <\/strong>(Chaves de API) na se\u00e7\u00e3o <strong>Team and Access <\/strong>(Equipe e acesso) da p\u00e1gina Settings para visualizar as chaves da sua conta Algolia.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/api-keys-algolia-cloud.png\" alt=\"P\u00e1gina de chaves de API na Algolia Cloud.\" width=\"1600\" height=\"1020\"><figcaption class=\"wp-caption-text\">P\u00e1gina de chaves de API na Algolia Cloud.<\/figcaption><\/figure>\n<p>Na p\u00e1gina Chaves de API, observe os valores <strong>Application ID <\/strong>(ID do aplicativo) e <strong>Admin API Key<\/strong>\u00a0(Chave de API do administrador). Voc\u00ea usar\u00e1 essas credenciais para autenticar a conex\u00e3o entre o aplicativo Laravel e o Algolia.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/application-id-admin-keys.png\" alt=\"ID do aplicativo e chave de API do administrador.\" width=\"1600\" height=\"868\"><figcaption class=\"wp-caption-text\">ID do aplicativo e chave de API do administrador.<\/figcaption><\/figure>\n<p>Adicione o c\u00f3digo abaixo ao seu arquivo .env usando seu editor de c\u00f3digo e substitua os espa\u00e7os reservados pelos segredos correspondentes da API do Algolia.<\/p>\n<pre><code class=\"language-bash\">ALGOLIA_APP_ID=APPLICATION_ID\nALGOLIA_SECRET=ADMIN_API_KEY<\/code><\/pre>\n<p>Al\u00e9m disso, substitua a vari\u00e1vel <code>SCOUT_DRIVER<\/code> pelo c\u00f3digo abaixo para alterar o valor de <code>meilisearch<\/code> para <code>algolia<\/code>. Essa altera\u00e7\u00e3o instrui o Scout a usar o driver do Algolia.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER=algolia<\/code><\/pre>\n<h2>Como criar os controladores de aplicativo<\/h2>\n<p>No diret\u00f3rio <strong>app\/Http\/Controllers\/<\/strong>, crie um arquivo <strong>TrainSearchController.php<\/strong> para armazenar um controlador para o aplicativo. O controlador listar\u00e1 e adicionar\u00e1 dados ao modelo <code>Train<\/code>.<\/p>\n<p>Adicione o seguinte bloco de c\u00f3digo ao arquivo <strong>TrainSearchController.php<\/strong> para criar o controlador.<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppHttpControllers;\nuse IlluminateHttpRequest;\nuse AppHttpRequests;\nuse AppModelsTrain;\n\nclass TrainSearchController extends Controller\n{\n    \/**\n     * Get the index name for the model.\n     *\n     * @return string\n    *\/\n    public function index(Request $request)\n    {\n        if($request-&gt;has('titlesearch')){\n            $trains = Train::search($request-&gt;titlesearch)\n                -&gt;paginate(6);\n        }else{\n            $trains = Train::paginate(6);\n        }\n        return view('Train-search',compact('trains'));\n    }\n\n    \/**\n     * Get the index name for the model.\n     *\n     * @return string\n    *\/\n    public function create(Request $request)\n    {\n        $this-&gt;validate($request,['title'=&gt;'required']);\n\n        $trains = Train::create($request-&gt;all());\n        return back();\n    }\n}<\/code><\/pre>\n<h2>Como criar as rotas do aplicativo<\/h2>\n<p>Nesta etapa, voc\u00ea criar\u00e1 as rotas para listar e adicionar novos trens ao banco de dados.<\/p>\n<p>Abra o arquivo <strong>routes\/web.php<\/strong> e substitua o c\u00f3digo existente pelo bloco abaixo.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nuse IlluminateSupportFacadesRoute;\nuse AppHttpControllersTrainSearchController;\n\nRoute::get('\/', function () {\n    return view('welcome');\n});\n\nRoute::get('trains-lists', [TrainSearchController::class, 'index']) -&gt; name ('trains-lists');\n\nRoute::post('create-item', [TrainSearchController::class, 'create']) -&gt; name ('create-item');<\/code><\/pre>\n<p>O c\u00f3digo acima define duas rotas no aplicativo. A solicita\u00e7\u00e3o <code>GET<\/code> para a rota <code>\/trains-lists<\/code> alista todos os dados de trens armazenados. A solicita\u00e7\u00e3o <code>POST<\/code> para a rota <code>\/create-item<\/code> cria novos dados de train.<\/p>\n<h2>Como criar as visualiza\u00e7\u00f5es do aplicativo<\/h2>\n<p>Crie um arquivo no diret\u00f3rio <strong>resources\/views\/<\/strong> e nomeie-o <strong>Train-search.blade.php<\/strong>. O arquivo exibir\u00e1 a interface de usu\u00e1rio para a funcionalidade de pesquisa.<\/p>\n<p>Adicione o conte\u00fado do bloco de c\u00f3digo abaixo ao arquivo <strong>Train-search.blade.php<\/strong> para criar uma \u00fanica p\u00e1gina para a funcionalidade de pesquisa.<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;Laravel - Laravel Scout Algolia Search Example&lt;\/title&gt;\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.min.css\"&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&lt;div class=\"container\"&gt;\n    &lt;h2 class=\"text-bold\"&gt;Laravel Full-Text Search Using Scout &lt;\/h2&gt;&lt;br\/&gt;\n    &lt;form method=\"POST\" action=\"{{ route('create-item') }}\" autocomplete=\"off\"&gt;\n        @if(count($errors))\n            &lt;div class=\"alert alert-danger\"&gt;\n                &lt;strong&gt;Whoops!&lt;\/strong&gt; There is an error with your input.\n                &lt;br\/&gt;\n                &lt;ul&gt;\n                    @foreach($errors-&gt;all() as $error)\n                    &lt;li&gt;{{ $error }}&lt;\/li&gt;\n                    @endforeach\n                &lt;\/ul&gt;\n            &lt;\/div&gt;\n        @endif\n\n        &lt;input type=\"hidden\" name=\"_token\" value=\"{{ csrf_token() }}\"&gt;\n\n        &lt;div class=\"row\"&gt;\n            &lt;div class=\"col-md-6\"&gt;\n                &lt;div class=\"form-group {{ $errors-&gt;has('title') ? 'has-error' : '' }}\"&gt;\n                    &lt;input type=\"text\" id=\"title\" name=\"title\" class=\"form-control\" placeholder=\"Enter Title\" value=\"{{ old('title') }}\"&gt;\n                    &lt;span class=\"text-danger\"&gt;{{ $errors-&gt;first('title') }}&lt;\/span&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"col-md-6\"&gt;\n                &lt;div class=\"form-group\"&gt;\n                    &lt;button class=\"btn btn-primary\"&gt;Create New Train&lt;\/button&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/form&gt;\n\n    &lt;div class=\"panel panel-primary\"&gt;\n      &lt;div class=\"panel-heading\"&gt;Train Management&lt;\/div&gt;\n      &lt;div class=\"panel-body\"&gt;\n            &lt;form method=\"GET\" action=\"{{ route('trains-lists') }}\"&gt;\n\n                &lt;div class=\"row\"&gt;\n                    &lt;div class=\"col-md-6\"&gt;\n                        &lt;div class=\"form-group\"&gt;\n                            &lt;input type=\"text\" name=\"titlesearch\" class=\"form-control\" placeholder=\"Enter Title For Search\" value=\"{{ old('titlesearch') }}\"&gt;\n                        &lt;\/div&gt;\n                    &lt;\/div&gt;\n                    &lt;div class=\"col-md-6\"&gt;\n                        &lt;div class=\"form-group\"&gt;\n                            &lt;button class=\"btn btn-primary\"&gt;Search&lt;\/button&gt;\n                        &lt;\/div&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n            &lt;\/form&gt;\n\n            &lt;table class=\"table\"&gt;\n                &lt;thead&gt;\n                    &lt;th&gt;Id&lt;\/th&gt;\n                    &lt;th&gt;Train Title&lt;\/th&gt;\n                    &lt;th&gt;Creation Date&lt;\/th&gt;\n                    &lt;th&gt;Updated Date&lt;\/th&gt;\n                &lt;\/thead&gt;\n                &lt;tbody&gt;\n                    @if($trains-&gt;count())\n                        @foreach($trains as $key =&gt; $item)\n                            &lt;tr&gt;\n                                &lt;td&gt;{{ ++$key }}&lt;\/td&gt;\n                                &lt;td&gt;{{ $item-&gt;title }}&lt;\/td&gt;\n                                &lt;td&gt;{{ $item-&gt;created_at }}&lt;\/td&gt;\n                                &lt;td&gt;{{ $item-&gt;updated_at }}&lt;\/td&gt;\n                            &lt;\/tr&gt;\n                        @endforeach\n                    @else\n                        &lt;tr&gt;\n                            &lt;td colspan=\"4\"&gt;No train data available&lt;\/td&gt;\n                        &lt;\/tr&gt;\n                    @endif\n                &lt;\/tbody&gt;\n            &lt;\/table&gt;\n            {{ $trains-&gt;links() }}\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>O c\u00f3digo HTML acima cont\u00e9m um elemento de formul\u00e1rio com um campo de entrada e um bot\u00e3o para digitar o t\u00edtulo train antes de voc\u00ea salv\u00e1-lo no banco de dados. O c\u00f3digo tamb\u00e9m tem uma tabela HTML que exibe os detalhes <strong>id<\/strong>,\u00a0<strong>title<\/strong>,\u00a0<strong>created_at<\/strong>\u00a0e <strong>updated_at<\/strong><strong>\u00a0<\/strong>de uma entrada train no banco de dados.<\/p>\n<h2>Como usar a pesquisa Algolia<\/h2>\n<p>Para visualizar a p\u00e1gina, navegue at\u00e9 <a href=\"http:\/\/127.0.0.1:8000\/trains-lists\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/127.0.0.1:8000\/trains-lists<\/a> em seu navegador da web.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/train-model-data.png\" alt=\"Dados do modelo train.\" width=\"1600\" height=\"527\"><figcaption class=\"wp-caption-text\">Dados do modelo train.<\/figcaption><\/figure>\n<p>O banco de dados est\u00e1 vazio no momento, ent\u00e3o voc\u00ea precisa inserir um t\u00edtulo train de demonstra\u00e7\u00e3o no campo de entrada e clicar em <strong>Create New Train<\/strong>\u00a0para salv\u00e1-lo.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/new-train-entry.png\" alt=\"Inser\u00e7\u00e3o de uma nova entrada train.\" width=\"1600\" height=\"531\"><figcaption class=\"wp-caption-text\">Inser\u00e7\u00e3o de uma nova entrada train.<\/figcaption><\/figure>\n<p>Para usar o recurso de pesquisa, digite uma palavra-chave de qualquer t\u00edtulo train salvo no campo de entrada <strong>Enter Title For Search <\/strong>(Insira o t\u00edtulo para pesquisa) e clique em <strong>Search<\/strong>.<\/p>\n<p>Conforme mostrado na imagem abaixo, ser\u00e3o exibidas apenas as entradas de pesquisa que contenham a palavra-chave no t\u00edtulo.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/search-feature-train-entry.png\" alt=\"Usando o recurso de pesquisa para encontrar uma entrada train.\" width=\"1600\" height=\"533\"><figcaption class=\"wp-caption-text\">Usando o recurso de pesquisa para encontrar uma entrada train.<\/figcaption><\/figure>\n<h2>Meilisearch com Laravel Scout<\/h2>\n<p>O Meilisearch \u00e9 um mecanismo de pesquisa de c\u00f3digo aberto com foco em velocidade, desempenho e na experi\u00eancia aprimorada do desenvolvedor. Compartilha v\u00e1rios recursos do Algolia, usando os mesmos algoritmos, estruturas de dados e pesquisa \u2014 mas com uma <a href=\"https:\/\/kinsta.com\/pt\/blog\/melhor-linguagem-de-programacao\/\">linguagem de programa\u00e7\u00e3o<\/a> diferente.<\/p>\n<p>Os desenvolvedores podem criar e hospedar uma inst\u00e2ncia do Meilisearch em sua infraestrutura local ou na nuvem. O Meilisearch tamb\u00e9m tem uma oferta de nuvem beta semelhante ao Algolia para desenvolvedores que desejam usar o produto sem gerenciar sua infraestrutura.<\/p>\n<p>No tutorial voc\u00ea j\u00e1 tem uma inst\u00e2ncia local do Meilisearch em execu\u00e7\u00e3o em seus cont\u00eaineres <a href=\"https:\/\/kinsta.com\/pt\/blog\/que-e-docker\/\">Docker<\/a>. Agora voc\u00ea estender\u00e1 a funcionalidade do Laravel Scout para usar a inst\u00e2ncia do Meilisearch.<\/p>\n<p>Para adicionar o Meilisearch ao aplicativo Laravel, execute o comando abaixo no terminal do seu projeto.<\/p>\n<pre><code class=\"language-bash\">composer require meilisearch\/meilisearch-php<\/code><\/pre>\n<p>Da\u00ed voc\u00ea precisa modificar as vari\u00e1veis do Meilisearch no arquivo <strong>.env<\/strong> para configur\u00e1-lo.<\/p>\n<p>Substitua as vari\u00e1veis <code>SCOUT_DRIVER<\/code>, <code>MEILISEARCH_HOST<\/code> e <code>MEILISEARCH_KEY<\/code> no arquivo <strong>.env<\/strong> pelas abaixo.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER=meilisearch\nMEILISEARCH_HOST=http:\/\/127.0.0.1:7700\nMEILISEARCH_KEY=LockKey<\/code><\/pre>\n<p>A chave <code>SCOUT_DRIVER<\/code> especifica o driver que o Scout deve usar, ao passo que <code>MEILISEARCH_HOST<\/code> representa o dom\u00ednio em que a inst\u00e2ncia do Meilisearch est\u00e1 sendo executada. Embora n\u00e3o seja necess\u00e1rio durante o desenvolvimento, recomendamos que voc\u00ea adicione <code>MEILISEARCH_KEY<\/code> na produ\u00e7\u00e3o.<\/p>\n<p><strong>Observa\u00e7\u00e3o:<\/strong> Insira um coment\u00e1rio com a ID e o segredo do Algolia quando usar o Meilisearch como driver preferencial.<\/p>\n<p>Ap\u00f3s concluir as configura\u00e7\u00f5es <strong>.env<\/strong>, voc\u00ea deve indexar os registros pr\u00e9-existentes usando o comando Artisan abaixo.<\/p>\n<pre><code class=\"language-bash\">php artisan scout:import \"AppModelsTrain\"<\/code><\/pre>\n<h2>Laravel Scout com mecanismo de banco de dados<\/h2>\n<p>O <a href=\"https:\/\/laravel.com\/docs\/9.x\/scout#database-and-collection-engines\" target=\"_blank\" rel=\"noopener noreferrer\">mecanismo de banco de dados<\/a> do Scout pode ser mais adequado para aplicativos que usam bancos de dados menores ou gerenciam cargas de trabalho menos intensas. Atualmente, o mecanismo de banco de dados \u00e9 compat\u00edvel com <a href=\"https:\/\/kinsta.com\/pt\/blog\/postgresql-vs-mysql\/\">PostgreSQL e MySQL<\/a>.<\/p>\n<p>Esse mecanismo aplica cl\u00e1usulas &#8220;where-like&#8221; e \u00edndices de texto completo ao seu banco de dados existente, permitindo encontrar os resultados de pesquisa mais relevantes. Voc\u00ea n\u00e3o precisa indexar seus registros ao usar o mecanismo de banco de dados.<\/p>\n<p>Para usar o mecanismo de banco de dados, voc\u00ea deve definir a vari\u00e1vel <code>SCOUT_DRIVER<\/code> <strong>.env<\/strong> para o banco de dados.<\/p>\n<p>Abra o arquivo <strong>.env<\/strong> no aplicativo Laravel e altere o valor da vari\u00e1vel <code>SCOUT_DRIVER<\/code>.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER = database<\/code><\/pre>\n<p>Ap\u00f3s alterar seu driver para o banco de dados, o Scout passar\u00e1 a usar o mecanismo de banco de dados para pesquisa de texto completo.<\/p>\n<h2>Mecanismo de coleta com o Laravel Scout<\/h2>\n<p>Al\u00e9m do mecanismo de banco de dados, o Scout tamb\u00e9m oferece um <a href=\"https:\/\/laravel.com\/docs\/9.x\/scout#collection-engine\" target=\"_blank\" rel=\"noopener noreferrer\">mecanismo de coleta<\/a>. Esse mecanismo usa cl\u00e1usulas &#8220;where&#8221; e filtragem da coleta para extrair os resultados de pesquisa mais relevantes.<\/p>\n<p>Ao contr\u00e1rio do mecanismo de banco de dados, o mecanismo de coleta \u00e9 compat\u00edvel com todos os bancos de dados relacionais que o Laravel tamb\u00e9m suporta.<\/p>\n<p>Voc\u00ea pode usar o mecanismo de coleta definindo a vari\u00e1vel de ambiente <code>SCOUT_DRIVER<\/code> como <code>collection<\/code> ou especificando manualmente o driver de coleta no arquivo de configura\u00e7\u00e3o do Scout.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER = collection<\/code><\/pre>\n<h2>Explorer com Elasticsearch<\/h2>\n<p>Com a for\u00e7a das consultas do Elasticsearch, o Explorer \u00e9 um driver moderno do Elasticsearch para o Laravel Scout. Ele oferece um driver Scout compat\u00edvel e benef\u00edcios como armazenamento, pesquisa e an\u00e1lise de grandes quantidades de dados em tempo real. O Elasticsearch com Laravel apresenta resultados em milissegundos.<\/p>\n<p>Para usar o driver Elasticsearch Explorer em seu aplicativo Laravel, voc\u00ea precisar\u00e1 configurar o arquivo boilerplate\u00a0<strong>docker-compose.yml<\/strong> que o script Laravel-Scout gerou. Voc\u00ea adicionar\u00e1 as configura\u00e7\u00f5es adicionais para o Elasticsearch e reiniciar\u00e1 os cont\u00eaineres.<\/p>\n<p>Abra o arquivo <strong>docker-compose.yml<\/strong> e substitua seu conte\u00fado pelo seguinte.<\/p>\n<pre><code class=\"language-yaml\"># For more information: https:\/\/laravel.com\/docs\/sail\nversion: '3'\nservices:\n    laravel.test:\n        build:\n            context: .\/vendor\/laravel\/sail\/runtimes\/8.1\n            dockerfile: Dockerfile\n            args:\n                WWWGROUP: '${WWWGROUP}'\n        image: sail-8.1\/app\n        extra_hosts:\n            - 'host.docker.internal:host-gateway'\n        ports:\n            - '${APP_PORT:-80}:80'\n            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'\n        environment:\n            WWWUSER: '${WWWUSER}'\n            LARAVEL_SAIL: 1\n            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'\n            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'\n        volumes:\n            - '.:\/var\/www\/html'\n        networks:\n            - sail\n        depends_on:\n            - mysql\n            - redis\n            - meilisearch\n            - mailhog\n            - selenium\n            - pgsql\n            - elasticsearch\n\n    mysql:\n        image: 'mysql\/mysql-server:8.0'\n        ports:\n            - '${FORWARD_DB_PORT:-3306}:3306'\n        environment:\n            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'\n            MYSQL_ROOT_HOST: \"%\"\n            MYSQL_DATABASE: '${DB_DATABASE}'\n            MYSQL_USER: '${DB_USERNAME}'\n            MYSQL_PASSWORD: '${DB_PASSWORD}'\n            MYSQL_ALLOW_EMPTY_PASSWORD: 1\n        volumes:\n            - 'sail-mysql:\/var\/lib\/mysql'\n            - '.\/vendor\/laravel\/sail\/database\/mysql\/create-testing-database.sh:\/docker-entrypoint-initdb.d\/10-create-testing-database.sh'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"mysqladmin\", \"ping\", \"-p${DB_PASSWORD}\"]\n            retries: 3\n            timeout: 5s\n            \n    elasticsearch:\n        image: 'elasticsearch:7.13.4'\n        environment:\n            - discovery.type=single-node\n        ports:\n            - '9200:9200'\n            - '9300:9300'\n        volumes:\n            - 'sailelasticsearch:\/usr\/share\/elasticsearch\/data'\n        networks:\n            - sail\n    kibana:\n        image: 'kibana:7.13.4'\n        environment:\n            - elasticsearch.hosts=http:\/\/elasticsearch:9200\n        ports:\n            - '5601:5601'\n        networks:\n            - sail\n        depends_on:\n            - elasticsearch\n    redis:\n        image: 'redis:alpine'\n        ports:\n            - '${FORWARD_REDIS_PORT:-6379}:6379'\n        volumes:\n            - 'sail-redis:\/data'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"redis-cli\", \"ping\"]\n            retries: 3\n            timeout: 5s\n    pgsql:\n        image: 'postgres:13'\n        ports:\n            - '${FORWARD_DB_PORT:-5432}:5432'\n        environment:\n            PGPASSWORD: '${DB_PASSWORD:-secret}'\n            POSTGRES_DB: '${DB_DATABASE}'\n            POSTGRES_USER: '${DB_USERNAME}'\n            POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'\n        volumes:\n            - 'sailpgsql:\/var\/lib\/postgresql\/data'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"pg_isready\", \"-q\", \"-d\", \"${DB_DATABASE}\", \"-U\", \"${DB_USERNAME}\"]\n            retries: 3\n            timeout: 5s\n    meilisearch:\n        image: 'getmeili\/meilisearch:latest'\n        ports:\n            - '${FORWARD_MEILISEARCH_PORT:-7700}:7700'\n        volumes:\n            - 'sail-meilisearch:\/meili_data'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"wget\", \"--no-verbose\", \"--spider\",  \"http:\/\/localhost:7700\/health\"]\n            retries: 3\n            timeout: 5s\n    mailhog:\n        image: 'mailhog\/mailhog:latest'\n        ports:\n            - '${FORWARD_MAILHOG_PORT:-1025}:1025'\n            - '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025'\n        networks:\n            - sail\n    selenium:\n        image: 'selenium\/standalone-chrome'\n        extra_hosts:\n            - 'host.docker.internal:host-gateway'\n        volumes:\n            - '\/dev\/shm:\/dev\/shm'\n        networks:\n            - sail\nnetworks:\n    sail:\n        driver: bridge\nvolumes:\n    sail-mysql:\n        driver: local\n    sail-redis:\n        driver: local\n    sail-meilisearch:\n        driver: local\n    sailpgsql:\n        driver: local\n    sailelasticsearch:\n        driver: local <\/code><\/pre>\n<p>Em seguida, execute o comando abaixo para extrair a nova imagem do Elasticsearch que voc\u00ea adicionou ao arquivo <strong>docker-compose.yml<\/strong>.<\/p>\n<pre><code class=\"language-bash\">docker-compose up<\/code><\/pre>\n<p>Da\u00ed execute o comando Composer abaixo para instalar o Explorer no projeto.<\/p>\n<pre><code class=\"language-bash\">composer require jeroen-g\/explorer<\/code><\/pre>\n<p>Voc\u00ea tamb\u00e9m precisa criar um arquivo de configura\u00e7\u00e3o para o driver do Explorer.<\/p>\n<p>Execute o comando Artisan abaixo para gerar um arquivo <strong>explorer.config<\/strong> para armazenar as configura\u00e7\u00f5es.<\/p>\n<pre><code class=\"language-bash\">php artisan vendor:publish --tag=explorer.config<\/code><\/pre>\n<p>O arquivo de configura\u00e7\u00e3o gerado acima estar\u00e1 dispon\u00edvel no diret\u00f3rio <strong>\/config<\/strong>.<\/p>\n<p>No arquivo <strong>config\/explorer.php<\/strong>, voc\u00ea pode referenciar seu modelo usando a chave <code>indexes<\/code>.<\/p>\n<pre><code class=\"language-php\">'indexes' =&gt; [\n        AppModelsTrain::class\n],<\/code><\/pre>\n<p>Altere o valor da vari\u00e1vel <code>SCOUT_DRIVER<\/code> no arquivo <strong>.env<\/strong> para <code>elastic<\/code> para configurar o Scout para usar o driver do Explorer.<\/p>\n<pre><code class=\"language-bash\">SCOUT_DRIVER = elastic<\/code><\/pre>\n<p>Neste ponto, voc\u00ea usar\u00e1 o Explorer no modelo <code>Train<\/code> implementando a interface Explorer, que substituir\u00e1 o m\u00e9todo <code>mappableAs()<\/code>.<\/p>\n<p>Abra o arquivo <strong>Train.php<\/strong> no diret\u00f3rio <strong>App &gt; Models<\/strong> e substitua o c\u00f3digo existente pelo c\u00f3digo abaixo.<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppModels;\n \nuse IlluminateDatabaseEloquentFactoriesHasFactory;\nuse IlluminateDatabaseEloquentModel;\nuse JeroenGExplorerApplicationExplored;\nuse LaravelScoutSearchable;\n \nclass Train extends Model implements Explored\n{\n    use HasFactory;\n    use Searchable;\n \n    protected $fillable = ['title'];\n \n    public function mappableAs(): array\n    {\n        return [\n        \t'id'=&gt;$this-&gt;Id,\n        \t'title' =&gt; $this-&gt;title,\n        ];\n    }\n} <\/code><\/pre>\n<p>Com o c\u00f3digo que voc\u00ea adicionou acima, agora voc\u00ea pode usar o Explorer para pesquisar texto no modelo <code>Train<\/code>.<\/p>\n\n<h2>Resumo<\/h2>\n<p>Para desenvolvedores PHP, o Laravel e complementos como o Scout tornam suave a integra\u00e7\u00e3o de uma funcionalidade r\u00e1pida e robusta de pesquisa de texto completo. Com o mecanismo de banco de dados, o mecanismo de coleta e os recursos do Meilisearch e do Elasticsearch, voc\u00ea pode interagir com o banco de dados do seu aplicativo e implementar mecanismos de pesquisa avan\u00e7ados em meros milissegundos.<\/p>\n<p>O gerenciamento e a atualiza\u00e7\u00e3o impec\u00e1veis do seu banco de dados permite que voc\u00ea tenha uma experi\u00eancia ideal, ao mesmo tempo que seu c\u00f3digo permanece limpo e eficiente.<\/p>\n<p>Com nossas solu\u00e7\u00f5es de <a href=\"https:\/\/kinsta.com\/pt\/changelog\/hospedagem-aplicativos-e-bancos-dados\/\">hospedagem de aplicativos e bancos de dados<\/a>, a Kinsta \u00e9 o lugar ideal para ter todas as suas modernas necessidades de desenvolvimento com Laravel atendidas. <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Os primeiros $20 s\u00e3o por nossa conta<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O framework Laravel se tornou um recurso essencial para desenvolvedores que criam servi\u00e7os web. Como uma ferramenta de c\u00f3digo aberto, ele oferece uma infinidade de funcionalidades &#8230;<\/p>\n","protected":false},"author":199,"featured_media":59504,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[984],"class_list":["post-59503","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Saiba tudo sobre o Laravel Scout, como instal\u00e1-lo em um projeto Laravel e como usar a biblioteca para habilitar a pesquisa de texto completo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo\" \/>\n<meta property=\"og:description\" content=\"Saiba tudo sobre o Laravel Scout, como instal\u00e1-lo em um projeto Laravel e como usar a biblioteca para habilitar a pesquisa de texto completo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-15T13:24:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-24T06:09:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"750\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Saiba tudo sobre o Laravel Scout, como instal\u00e1-lo em um projeto Laravel e como usar a biblioteca para habilitar a pesquisa de texto completo.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo\",\"datePublished\":\"2023-10-15T13:24:33+00:00\",\"dateModified\":\"2023-10-24T06:09:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/\"},\"wordCount\":2602,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/\",\"name\":\"Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg\",\"datePublished\":\"2023-10-15T13:24:33+00:00\",\"dateModified\":\"2023-10-24T06:09:04+00:00\",\"description\":\"Saiba tudo sobre o Laravel Scout, como instal\u00e1-lo em um projeto Laravel e como usar a biblioteca para habilitar a pesquisa de texto completo.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg\",\"width\":1500,\"height\":750},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo - Kinsta\u00ae","description":"Saiba tudo sobre o Laravel Scout, como instal\u00e1-lo em um projeto Laravel e como usar a biblioteca para habilitar a pesquisa de texto completo.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/","og_locale":"pt_PT","og_type":"article","og_title":"Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo","og_description":"Saiba tudo sobre o Laravel Scout, como instal\u00e1-lo em um projeto Laravel e como usar a biblioteca para habilitar a pesquisa de texto completo.","og_url":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-10-15T13:24:33+00:00","article_modified_time":"2023-10-24T06:09:04+00:00","og_image":[{"width":1500,"height":750,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Saiba tudo sobre o Laravel Scout, como instal\u00e1-lo em um projeto Laravel e como usar a biblioteca para habilitar a pesquisa de texto completo.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tempo estimado de leitura":"16 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo","datePublished":"2023-10-15T13:24:33+00:00","dateModified":"2023-10-24T06:09:04+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/"},"wordCount":2602,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/","url":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/","name":"Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg","datePublished":"2023-10-15T13:24:33+00:00","dateModified":"2023-10-24T06:09:04+00:00","description":"Saiba tudo sobre o Laravel Scout, como instal\u00e1-lo em um projeto Laravel e como usar a biblioteca para habilitar a pesquisa de texto completo.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/05\/laravel-scout.jpg","width":1500,"height":750},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-scout\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/pt\/topicos\/laravel\/"},{"@type":"ListItem","position":3,"name":"Usando o Laravel Scout para Habilitar a Pesquisa de Texto Completo"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/pt\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=59503"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59503\/revisions"}],"predecessor-version":[{"id":64269,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/59503\/revisions\/64269"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59503\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59503\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59503\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59503\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59503\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59503\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59503\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59503\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/59503\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/59504"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=59503"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=59503"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=59503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}