Menu Docs
Página inicial do Docs
/ /

Full Text Search com Scout

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 de pesquisa do MongoDB 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 de Pesquisa do MongoDB do guia MongoDB 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.

Este tutorial demonstra como usar o Scout para compor e indexar documentos para o MongoDB Search a partir de modelos Eloquent (MongoDB ou SQL).

1

Antes de utilizar o Scout em seu aplicação, execute o seguinte comando a partir do diretório raiz do seu aplicativo para instalar o pacote do laravel/scout :

composer require laravel/scout
2

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:

<?php
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.

3

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:

config/scout.php
<?php
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 ou mongodb se a variável de ambiente não estiver definida

  • Especifica scout_ como o prefixo do nome da collection da collection pesquisável

No config/scout.php arquivo, você também pode especificar uma definição de índice personalizada do MongoDB 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:

.env
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.

4

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 de pesquisa do MongoDB em seu banco de dados MongoDB . A coleção é denominada scout_movies, com base no prefixo definido na etapa anterior. O índice do MongoDB 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 MongoDB 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 MongoDB Search, portanto, o comando scout:index pode não retornar uma mensagem de sucesso imediatamente.

5

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 MongoDB 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 MongoDB Search na scout_movies collection em seu aplicação Laravel MongoDB . Para saber como realizar pesquisas de texto completo com o MongoDB Search, consulte o guia do MongoDB Search.

Voltar

Cache e travas

Nesta página