(wagtailsearch_backends)= # 백엔드 Wagtailsearch는 여러 백엔드를 지원하여 검색에 데이터베이스를 사용하거나 Elasticsearch와 같은 외부 서비스를 사용할 수 있도록 합니다. `WAGTAILSEARCH_BACKENDS` 설정을 사용하여 사용할 백엔드를 구성할 수 있습니다. ```python WAGTAILSEARCH_BACKENDS = { 'default': { 'BACKEND': 'wagtail.search.backends.database', } } ``` (wagtailsearch_backends_auto_update)= ## `AUTO_UPDATE` 기본적으로 Wagtail은 모든 색인을 자동으로 최신 상태로 유지합니다. 이는 콘텐츠를 편집할 때 성능에 영향을 미칠 수 있으며, 특히 색인이 외부 서비스에서 호스팅되는 경우 더욱 그렇습니다. `AUTO_UPDATE` 설정을 사용하면 색인별로 이 기능을 비활성화할 수 있습니다. ```python WAGTAILSEARCH_BACKENDS = { 'default': { 'BACKEND': ..., 'AUTO_UPDATE': False, } } ``` 자동 업데이트를 비활성화한 경우 색인을 데이터베이스와 동기화 상태로 유지하려면 [](update_index) 명령을 정기적으로 실행해야 합니다. (wagtailsearch_backends_atomic_rebuild)= ## `ATOMIC_REBUILD` 기본적으로(`Elasticsearch` 백엔드를 사용할 때) `update_index` 명령이 실행되면 Wagtail은 색인을 삭제하고 처음부터 다시 빌드합니다. 이로 인해 재빌드가 완료될 때까지 검색 엔진이 결과를 반환하지 않으며, 오류가 발생하면 롤백할 수 없으므로 위험합니다. `ATOMIC_REBUILD` 설정을 `True` 로 설정하면 Wagtail은 새 색인이 완전히 빌드될 때까지 이전 색인을 활성 상태로 유지하면서 별도의 색인으로 다시 빌드합니다. 재빌드가 완료되면 색인이 원자적으로 교체되고 이전 색인은 삭제됩니다. ## `BACKEND` 다음은 Wagtail이 기본적으로 지원하는 백엔드 목록입니다. (wagtailsearch_backends_database)= ### 데이터베이스 백엔드 (기본값) `wagtail.search.backends.database` 데이터베이스 검색 백엔드는 사용 중인 데이터베이스 백엔드(예: PostgreSQL FTS, SQLite FTS5)의 전체 텍스트 검색 기능을 사용하여 데이터베이스에서 콘텐츠를 검색합니다. 이 백엔드는 개발용으로 사용되며 Elasticsearch 특정 기능이 필요하지 않은 사이트에서 프로덕션에서도 사용하기에 충분해야 합니다. PostgreSQL 데이터베이스 백엔드를 사용하는 경우 [`INSTALLED_APPS`](inv:django:std:setting#INSTALLED_APPS) 설정에 `django.contrib.postgres` 를 추가해야 합니다. (wagtailsearch_backends_elasticsearch)= ### Elasticsearch 백엔드 Elasticsearch 버전 7 및 8이 지원됩니다. 버전에 맞는 백엔드를 사용하십시오. - `wagtail.search.backends.elasticsearch7` (Elasticsearch 7.x) - `wagtail.search.backends.elasticsearch8` (Elasticsearch 8.x) 전제 조건은 [Elasticsearch](https://www.elastic.co/downloads/elasticsearch) 서비스 자체와 pip를 통한 [elasticsearch-py](https://elasticsearch-py.readthedocs.io/) 패키지입니다. 패키지의 주 버전은 설치된 Elasticsearch 버전과 일치해야 합니다. ```sh pip install "elasticsearch>=7.0.0,<8.0.0" # Elasticsearch 7.x용 ``` ```sh pip install "elasticsearch>=8.0.0,<9.0.0" # Elasticsearch 8.x용 ``` 백엔드는 설정에서 구성됩니다. ```python 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` 필드에 사용자 이름과 암호를 선택적으로 제공할 수 있습니다. ```python WAGTAILSEARCH_BACKENDS = { 'default': { ... 'URLS': ['https://username:password@localhost:9200'], ... } } ``` `INDEX_SETTINGS` 는 색인을 생성하기 위한 기본 설정을 재정의하는 데 사용되는 사전입니다. 기본 설정은 `wagtail/wagtail/search/backends/elasticsearch7.py` 모듈의 `ElasticsearchSearchBackend` 클래스 내에 정의됩니다. 새 키는 추가되고 기존 키는 사전이 아닌 경우 새 값으로 대체됩니다. 다음은 샤드 수를 구성하고 Italian LanguageAnalyzer를 기본 분석기로 설정하는 방법의 예시입니다. ```python WAGTAILSEARCH_BACKENDS = { 'default': { ..., 'INDEX_SETTINGS': { 'settings': { 'index': { 'number_of_shards': 1, }, 'analysis': { 'analyzer': { 'default': { 'type': 'italian' } } } } } } ``` 개발 또는 프로덕션에서 Elasticsearch 서버를 실행하지 않으려면 테스트 및 개발에 적합한 무료 계정을 제공하는 [Bonsai](https://bonsai.io/)를 포함하여 많은 호스팅 서비스가 있습니다. Bonsai를 사용하려면: - `Bonsai` 에서 계정을 등록하십시오. - Bonsai 대시보드를 사용하여 클러스터를 만드십시오. - Bonsai 대시보드의 클러스터 URL을 사용하여 `WAGTAILSEARCH_BACKENDS` 의 Elasticsearch 항목에 `URLS` 를 구성하십시오. - `./manage.py update_index` 를 실행하십시오. (opensearch)= ### OpenSearch OpenSearch는 원래 Elasticsearch 7의 포크로 생성된 커뮤니티 중심 검색 엔진입니다. Wagtail은 `wagtail.search.backends.elasticsearch7` 백엔드와 [Elasticsearch Python 라이브러리](https://pypi.org/project/elasticsearch/) 버전 7.13.4를 통해 OpenSearch를 지원합니다. 라이브러리의 최신 버전은 Elastic 브랜드 서버에만 연결할 수 있으며 OpenSearch와 호환되지 않습니다. ### Amazon AWS OpenSearch Elasticsearch 백엔드는 [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/)와 호환되지만, IAM 기반 인증을 처리하기 위한 추가 구성이 필요합니다. 이는 [requests-aws4auth](https://pypi.org/project/requests-aws4auth/) 패키지와 다음 구성을 사용하여 수행할 수 있습니다. ```python 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 백엔드 코드를 살펴보십시오.