Docs Menu
Docs Home
/ /

Scout를 사용한 전체 텍스트 검색

이 가이드 에서는 Laravel MongoDB 애플리케이션 에서 Laravel Scout 기능 사용하는 방법을 학습 수 있습니다. Scout를 사용하면 Eloquent 모델에서 전체 텍스트 검색 구현 수 있습니다. 자세히 학습 Laravel 문서에서 Laravel Scout 을 참조하세요.

Laravel MongoDB 에 대한 Scout 통합은 다음과 같은 기능을 제공합니다.

  • 모든 MongoDB 또는 SQL 모델에서 MongoDB 검색 인덱스 를 생성하기 위한 추상화를 제공합니다.

    중요

    스키마 빌더를 사용하여 검색 인덱스 만들기

    문서가 이미 MongoDB 에 있는 경우 MongoDB PHP 라이브러리 또는 Schema 빌더 메서드를 사용하여 검색 인덱스를 생성하여 검색 쿼리 성능을 개선합니다. 검색 인덱스 생성에 대해 자세히 학습 MongoDB Search 가이드 의 MongoDBSearch 인덱스 생성 섹션을 참조하세요.

  • MongoDB 의 데이터를 Meilisearch 또는 Algolia 와 같은 검색 엔진 으로 자동으로 복제할 수 있습니다. MongoDB Eloquent 모델을 가져오고 인덱스 할 소스로 사용할 수 있습니다. 검색 엔진 에 대한 인덱싱 에 대해 자세히 학습 Laravel Scout 문서의 인덱싱 섹션을 참조하세요.

중요

배포 호환성

Laravel Scout는 MongoDB Atlas 배포서버에 연결할 때만 사용할 수 있습니다. 이 기능 자체 관리형 배포서버에는 사용할 수 없습니다.

이 튜토리얼에서는 Scout를 사용하여 Eloquent 모델(MongoDB 또는 SQL)에서 MongoDB 검색용 인덱스된 문서를 합성하고 인덱싱하는 방법을 보여줍니다.

1

애플리케이션 에서 Scout를 사용하려면 먼저 애플리케이션의 루트 디렉토리 에서 다음 명령을 실행 laravel/scout 패키지 설치합니다.

composer require laravel/scout
2

Eloquent 모델에 Laravel\Scout\Searchable 특성을 추가하여 검색 가능하게 만듭니다. 다음 예시 이 특성을 sample_mflix.movies 컬렉션 의 문서를 나타내는 Movie 모델에 추가합니다.

<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
use Laravel\Scout\Searchable;
class Movie extends Model
{
use Searchable;
protected $connection = 'mongodb';
}

Searchable 트레이트를 사용하여 문서의 서식을 다시 지정하거나, 관련 문서를 포함하거나, 문서 값을 변환할 수도 있습니다. 자세히 학습 Laravel Scout 문서의 검색 가능한 데이터 구성하기 섹션을 참조하세요.

3

애플리케이션 이 데이터베이스 연결로 MongoDB 사용하도록 구성되어 있는지 확인합니다. MongoDB 구성하는 방법을 학습 빠른 시작 가이드 의 MongoDB 연결 구성 섹션을 참조하세요.

애플리케이션 에서 Scout를 구성하려면 애플리케이션의 config 디렉토리 에 scout.php 라는 파일 만듭니다. 파일 에 다음 코드를 붙여넣어 Scout를 구성합니다.

config/scout.php
<?php
return [
'driver' => env('SCOUT_DRIVER', 'mongodb'),
'mongodb' => [
'connection' => env('SCOUT_MONGODB_CONNECTION', 'mongodb'),
],
'prefix' => env('SCOUT_PREFIX', 'scout_'),
];

앞의 코드는 다음 구성을 지정합니다.

  • SCOUT_DRIVER 환경 변수의 값을 기본값 검색 운전자 로 사용하거나, 환경 변수가 설정하다 되지 않은 경우 mongodb 를 사용합니다.

  • 검색 가능한 컬렉션 의 컬렉션 이름에 대한 접두사로 scout_ 를 지정합니다.

config/scout.php 파일에서 사용자 지정 MongoDB 검색 인덱스 정의를 지정할 수도 있습니다. 자세히 학습 다음 단계의 사용자 지정 인덱스 정의 예시 참조하세요.

애플리케이션의 .env 파일 에서 다음 환경 변수를 설정하여 mongodb 을 기본값 검색 운전자 로 선택합니다.

.env
SCOUT_DRIVER=mongodb

대기열

Scout를 사용할 때는 애플리케이션의 웹 인터페이스에 대한 응답 시간을 줄이도록 대기열 운전자 구성하는 것이 좋습니다. 자세히 학습하려면 Laravel Scout 문서의 대기열 섹션대기열 가이드 참조하세요.

4

Scout를 구성하고 기본값 검색 운전자 설정하다 후 애플리케이션의 루트 디렉토리 에서 다음 명령을 실행 하여 검색 가능한 컬렉션 및 검색 인덱스 만들 수 있습니다.

php artisan scout:index 'App\Models\Movie'

MongoDB 기본값 검색 운전자 로 설정하다 때문에 앞의 명령은 MongoDB database 에 MongoDB Search 인덱스 사용하여 검색 컬렉션 생성합니다. 컬렉션 의 이름은 이전 단계에서 설정하다 접두사에 따라 scout_movies으로 지정됩니다. MongoDB 검색 인덱스 이름은 scout 이며 기본값으로 다음과 같은 구성을 갖습니다.

{
"mappings": {
"dynamic": true
}
}

인덱스 정의를 사용자 지정하려면 config/scout.php 파일 의 mongodb 항목에 index-definitions 구성을 추가합니다. 다음 코드는 scout_movies 컬렉션 에 생성할 사용자 지정 인덱스 정의를 지정하는 방법을 보여줍니다.

'mongodb' => [
'connection' => env('SCOUT_MONGODB_CONNECTION', 'mongodb'),
'index-definitions' => [
'scout_movies' => [
'mappings' => [
'dynamic' => false,
'fields' => ['title' => ['type' => 'string']]
]
]
]
], ...

MongoDB 검색 인덱스 정의를 정의하는 방법에 대해 자세히 알아보려면 Atlas 문서에서 필드 매핑 정의 가이드 를 참조하세요.

참고

MongoDB MongoDB 검색 인덱스를 만들고 완료하는 데 최대 1분이 걸릴 수 있으므로 scout:index 명령이 성공 메시지를 즉시 반환하지 않을 수 있습니다.

5

Scout를 사용하여 Eloquent 모델로 모델링된 소스 컬렉션 의 데이터를 검색 가능한 컬렉션 으로 복제할 수 있습니다. 다음 명령은 movies 컬렉션 의 데이터를 이전 단계에서 인덱싱된 scout_movies 컬렉션 으로 복제하고 인덱싱합니다.

php artisan scout:import 'App\Models\Movie'

문서는 MongoDB 검색 쿼리에 대해 자동으로 인덱싱됩니다.

가져올 필드 선택

검색 가능한 컬렉션 에 있는 소스 문서의 모든 필드가 필요하지 않을 수 있습니다. 복제하는 데이터의 양을 제한하면 애플리케이션의 속도와 성능을 향상시킬 수 있습니다.

Eloquent 모델 클래스에서 toSearchableArray() 메서드를 정의하여 가져올 특정 필드를 선택할 수 있습니다. 다음 코드는 복제 위해 plottitle 필드만 선택하도록 toSearchableArray() 을 정의하는 방법을 보여 줍니다.

class Movie extends Model
{
....
public function toSearchableArray(): array
{
return [
'plot' => $this->plot,
'title' => $this->title,
];
}
}

이 단계를 완료한 후 Laravel MongoDB 애플리케이션 의 scout_movies 컬렉션 에 대해 MongoDB 검색 쿼리를 수행할 수 있습니다. MongoDB Search로 전체 텍스트 검색을 수행하는 방법을 학습하려면 MongoDB Search 가이드를 참조하세요.

돌아가기

캐시 및 잠금

이 페이지의 내용