백엔드¶
Wagtailsearch는 여러 백엔드를 지원하여 검색에 데이터베이스를 사용하거나 Elasticsearch와 같은 외부 서비스를 사용할 수 있도록 합니다.
WAGTAILSEARCH_BACKENDS 설정을 사용하여 사용할 백엔드를 구성할 수 있습니다.
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.database',
}
}
AUTO_UPDATE¶
기본적으로 Wagtail은 모든 색인을 자동으로 최신 상태로 유지합니다. 이는 콘텐츠를 편집할 때 성능에 영향을 미칠 수 있으며, 특히 색인이 외부 서비스에서 호스팅되는 경우 더욱 그렇습니다.
AUTO_UPDATE 설정을 사용하면 색인별로 이 기능을 비활성화할 수 있습니다.
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': ...,
'AUTO_UPDATE': False,
}
}
자동 업데이트를 비활성화한 경우 색인을 데이터베이스와 동기화 상태로 유지하려면 update_index 명령을 정기적으로 실행해야 합니다.
ATOMIC_REBUILD¶
기본적으로(Elasticsearch 백엔드를 사용할 때) update_index 명령이 실행되면 Wagtail은 색인을 삭제하고 처음부터 다시 빌드합니다. 이로 인해 재빌드가 완료될 때까지 검색 엔진이 결과를 반환하지 않으며, 오류가 발생하면 롤백할 수 없으므로 위험합니다.
ATOMIC_REBUILD 설정을 True 로 설정하면 Wagtail은 새 색인이 완전히 빌드될 때까지 이전 색인을 활성 상태로 유지하면서 별도의 색인으로 다시 빌드합니다. 재빌드가 완료되면 색인이 원자적으로 교체되고 이전 색인은 삭제됩니다.
BACKEND¶
다음은 Wagtail이 기본적으로 지원하는 백엔드 목록입니다.
데이터베이스 백엔드 (기본값)¶
wagtail.search.backends.database
데이터베이스 검색 백엔드는 사용 중인 데이터베이스 백엔드(예: PostgreSQL FTS, SQLite FTS5)의 전체 텍스트 검색 기능을 사용하여 데이터베이스에서 콘텐츠를 검색합니다. 이 백엔드는 개발용으로 사용되며 Elasticsearch 특정 기능이 필요하지 않은 사이트에서 프로덕션에서도 사용하기에 충분해야 합니다.
PostgreSQL 데이터베이스 백엔드를 사용하는 경우 INSTALLED_APPS 설정에 django.contrib.postgres 를 추가해야 합니다.
Elasticsearch 백엔드¶
Elasticsearch 버전 7 및 8이 지원됩니다. 버전에 맞는 백엔드를 사용하십시오.
wagtail.search.backends.elasticsearch7(Elasticsearch 7.x)wagtail.search.backends.elasticsearch8(Elasticsearch 8.x)
전제 조건은 Elasticsearch 서비스 자체와 pip를 통한 elasticsearch-py 패키지입니다. 패키지의 주 버전은 설치된 Elasticsearch 버전과 일치해야 합니다.
pip install "elasticsearch>=7.0.0,<8.0.0" # Elasticsearch 7.x용
pip install "elasticsearch>=8.0.0,<9.0.0" # Elasticsearch 8.x용
백엔드는 설정에서 구성됩니다.
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.elasticsearch8',
'URLS': ['https://localhost:9200'],
'INDEX': 'wagtail',
'TIMEOUT': 5,
'OPTIONS': {},
'INDEX_SETTINGS': {},
}
}
BACKEND 외의 키는 선택 사항이며 표시된 값으로 기본 설정됩니다. OPTIONS 에 정의된 모든 키는 대소문자를 구분하는 키워드 인수(예: 'max_retries': 1)로 Elasticsearch 생성자에 직접 전달됩니다.
Elasticsearch 서비스에 대한 인증 자격 증명을 제공하기 위해 URL 필드에 사용자 이름과 암호를 선택적으로 제공할 수 있습니다.
WAGTAILSEARCH_BACKENDS = {
'default': {
...
'URLS': ['https://username:password@localhost:9200'],
...
}
}
INDEX_SETTINGS 는 색인을 생성하기 위한 기본 설정을 재정의하는 데 사용되는 사전입니다. 기본 설정은 wagtail/wagtail/search/backends/elasticsearch7.py 모듈의 ElasticsearchSearchBackend 클래스 내에 정의됩니다. 새 키는 추가되고 기존 키는 사전이 아닌 경우 새 값으로 대체됩니다. 다음은 샤드 수를 구성하고 Italian LanguageAnalyzer를 기본 분석기로 설정하는 방법의 예시입니다.
WAGTAILSEARCH_BACKENDS = {
'default': {
...,
'INDEX_SETTINGS': {
'settings': {
'index': {
'number_of_shards': 1,
},
'analysis': {
'analyzer': {
'default': {
'type': 'italian'
}
}
}
}
}
}
개발 또는 프로덕션에서 Elasticsearch 서버를 실행하지 않으려면 테스트 및 개발에 적합한 무료 계정을 제공하는 Bonsai를 포함하여 많은 호스팅 서비스가 있습니다. Bonsai를 사용하려면:
Bonsai에서 계정을 등록하십시오.Bonsai 대시보드를 사용하여 클러스터를 만드십시오.
Bonsai 대시보드의 클러스터 URL을 사용하여
WAGTAILSEARCH_BACKENDS의 Elasticsearch 항목에URLS를 구성하십시오../manage.py update_index를 실행하십시오.
OpenSearch¶
OpenSearch는 원래 Elasticsearch 7의 포크로 생성된 커뮤니티 중심 검색 엔진입니다. Wagtail은 wagtail.search.backends.elasticsearch7 백엔드와 Elasticsearch Python 라이브러리 버전 7.13.4를 통해 OpenSearch를 지원합니다. 라이브러리의 최신 버전은 Elastic 브랜드 서버에만 연결할 수 있으며 OpenSearch와 호환되지 않습니다.
Amazon AWS OpenSearch¶
Elasticsearch 백엔드는 Amazon OpenSearch Service와 호환되지만, IAM 기반 인증을 처리하기 위한 추가 구성이 필요합니다. 이는 requests-aws4auth 패키지와 다음 구성을 사용하여 수행할 수 있습니다.
from elasticsearch import RequestsHttpConnection
from requests_aws4auth import AWS4Auth
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.elasticsearch7',
'INDEX': 'wagtail',
'TIMEOUT': 5,
'HOSTS': [{
'host': 'YOURCLUSTER.REGION.es.amazonaws.com',
'port': 443,
'use_ssl': True,
'verify_certs': True,
'http_auth': AWS4Auth('ACCESS_KEY', 'SECRET_KEY', 'REGION', 'es'),
}],
'OPTIONS': {
'connection_class': RequestsHttpConnection,
},
}
}
자체 백엔드 롤링¶
Wagtail 검색 백엔드는 wagtail/wagtail/wagtailsearch/backends/base.py 에 정의된 인터페이스를 구현합니다. 최소한 백엔드의 search() 메서드는 객체 컬렉션 또는 model.objects.none() 을 반환해야 합니다. 모든 기능을 갖춘 검색 백엔드의 경우 elasticsearch.py 의 Elasticsearch 백엔드 코드를 살펴보십시오.