Menu Docs
Página inicial do Docs
/ / /
Laravel MongoDB

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

Este tutorial demonstra como usar o Scout para compor e indexar documentos para o Atlas 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 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:

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

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

Voltar

Cache e travas

Nesta página