Full Text Search com Scout
Visão geral
Neste guia, você aprenderá a usar o recurso Escoteiro do Laravel em seu aplicação Laravel MongoDB . O Scout permite implementar a pesquisa de texto completo em seus modelos Eloquent. Para saber mais, consulte Laravel Scout na documentação do Laravel.
A integração do Escoteiro para o Laravel MongoDB fornece a seguinte funcionalidade:
Fornece uma abstração para criar índices do Atlas Search a partir de qualquer modelo MongoDB ou SQL.
Importante
Use o Construtor de Esquema para Criar Índices de Pesquisa
Se seus documentos já estiverem no MongoDB, crie índices de pesquisa usando a Biblioteca PHP do MongoDB ou
Schema
métodos de construtor para melhorar o desempenho da query de pesquisa . Para saber mais sobre como criar índices de pesquisa, consulte a seção Criar um índice do Atlas Search do guia Atlas Search.Permite replicar automaticamente dados do MongoDB em um mecanismo de pesquisa como Meilisearch ou Algolia. Você pode usar um modelo MongoDB Eloquent como origem para importar e indexar. Para saber mais sobre indexação para um mecanismo de busca, consulte a seção Indexação da documentação do Laravel Scout.
Importante
Compatibilidade de implantação
Você pode usar o Laravel Scout somente quando se conectar a sistemas do MongoDB Atlas . Esta funcionalidade não está disponível para implementações autogerenciadas.
Tutorial de Atlas Search
Este tutorial demonstra como usar o Scout para compor e indexar documentos para o Atlas Search a partir de modelos Eloquent (MongoDB ou SQL).
Adicione a funcionalidade Pesquisável ao seu modelo
Adicione o traço Laravel\Scout\Searchable
a um modelo Eloquent para torná-lo pesquisável. O exemplo a seguir adiciona esta traço ao modelo Movie
, que representa documentos na coleção sample_mflix.movies
:
namespace App\Models; use MongoDB\Laravel\Eloquent\Model; use Laravel\Scout\Searchable; class Movie extends Model { use Searchable; protected $connection = 'mongodb'; }
Você também pode usar o traço Searchable
para reformatar documentos, incorporar documentos relacionados ou transformar valores de documento . Para saber mais, consulte a seção Configurando dados pesquisáveis da documentação do Laravel Scout.
Configurar o Scout em seu aplicação
Certifique-se de que seu aplicação esteja configurado para usar o MongoDB como conexão de banco de dados . Para saber como configurar o MongoDB, consulte a seção Configurar sua conexão MongoDB do guia de início rápido.
Para configurar o Scout em seu aplicação, crie um arquivo chamado scout.php
no diretório config
do seu aplicativo. Cole o seguinte código no arquivo para configurar o Scout:
return [ 'driver' => env('SCOUT_DRIVER', 'mongodb'), 'mongodb' => [ 'connection' => env('SCOUT_MONGODB_CONNECTION', 'mongodb'), ], 'prefix' => env('SCOUT_PREFIX', 'scout_'), ];
O código anterior especifica a seguinte configuração:
Usa o valor da variável de ambiente
SCOUT_DRIVER
como driver de pesquisa padrão oumongodb
se a variável de ambiente não estiver definidaEspecifica
scout_
como o prefixo do nome da collection da collection pesquisável
No arquivo config/scout.php
, você também pode especificar uma definição de índice personalizada do Atlas Search . Para saber mais, consulte o exemplo de definição de índice personalizado na etapa a seguir.
Configure a seguinte variável de ambiente no arquivo .env
do seu aplicativo para selecionar mongodb
como o driver de pesquisa padrão:
SCOUT_DRIVER=mongodb
Dica
Enfileiramento
Ao usar o Scout, considere configurar um driver de fila para reduzir o tempo de resposta da interface web do seu aplicativo. Para saber mais, consulte a seção Queuing da documentação do Laravel Scout e o guia Queues.
Crie o Índice Atlas Search
Depois de configurar o Scout e definir seu driver de pesquisa padrão, você pode criar sua collection pesquisável e índice de pesquisa executando o seguinte comando no diretório raiz do seu aplicativo:
php artisan scout:index 'App\Models\Movie'
Como você define o MongoDB como o driver de pesquisa padrão, o comando anterior cria a coleção de pesquisa com um índice do Atlas Search em seu banco de dados MongoDB . A coleção é denominada scout_movies
, com base no prefixo definido na etapa anterior. O índice do Atlas Search é denominado scout
e tem a seguinte configuração por padrão:
{ "mappings": { "dynamic": true } }
Para personalizar a definição do índice, adicione a configuração index-definitions
à entrada mongodb
em seu arquivo config/scout.php
. O seguinte código demonstra como especificar uma definição de índice personalizada para criar na coleção scout_movies
:
'mongodb' => [ 'connection' => env('SCOUT_MONGODB_CONNECTION', 'mongodb'), 'index-definitions' => [ 'scout_movies' => [ 'mappings' => [ 'dynamic' => false, 'fields' => ['title' => ['type' => 'string']] ] ] ] ], ...
Para saber mais sobre como definir as definições de índice do Atlas Search, consulte o guia Definir mapeamentos de campo na documentação do Atlas.
Observação
O MongoDB pode levar até um minuto para criar e finalizar um índice do Atlas Search , portanto, o comando scout:index
pode não retornar uma mensagem de sucesso imediatamente.
Importar dados para a coleção pesquisável
Você pode usar o Scout para replicar dados de uma collection de origem modelada pelo seu modelo Eloquent em uma collection pesquisável. O seguinte comando replica e indexa dados da collection movies
na collection scout_movies
indexada na etapa anterior:
php artisan scout:import 'App\Models\Movie'
Os documentos são indexados automaticamente para queries do Atlas Search .
Dica
Selecione campos para importar
Talvez você não precise de todos os campos de seus documentos de origem em sua coleção pesquisável. Limitar a quantidade de dados replicados pode melhorar a velocidade e o desempenho do aplicativo.
Você pode selecionar campos específicos para importar definindo o método toSearchableArray()
em sua classe de modelo Eloquent. O seguinte código demonstra como definir toSearchableArray()
para selecionar somente os campos plot
e title
para replicação:
class Movie extends Model { .... public function toSearchableArray(): array { return [ 'plot' => $this->plot, 'title' => $this->title, ]; } }
Depois de concluir estas etapas, você pode realizar queries do Atlas Search na collection scout_movies
em seu aplicação Laravel MongoDB . Para saber como realizar pesquisas de texto completo, consulte o guia Atlas Search.