홍보된 검색 결과

searchpromotions 모듈은 “홍보된 검색 결과”를 관리하고 검색 결과 페이지에 표시하기 위한 모델 및 사용자 인터페이스를 제공합니다.

“홍보된 검색 결과”를 통해 편집자는 관련 콘텐츠를 검색어에 명시적으로 연결할 수 있으므로 결과 페이지에는 검색 엔진의 결과 외에 선별된 콘텐츠가 포함될 수 있습니다.

설치

searchpromotions 모듈은 기본적으로 활성화되어 있지 않습니다. 설치하려면 프로젝트의 Django 설정 파일에 INSTALLED_APPSwagtail.contrib.search_promotions 를 추가합니다.

INSTALLED_APPS = [
    ...

    'wagtail.contrib.search_promotions',
]

이 앱에는 마이그레이션이 포함되어 있으므로 설치 후 migrate django-admin 명령을 실행해야 합니다.

사용법

설치되면 “설정” 메뉴에 “홍보된 검색 결과”라는 새 메뉴 항목이 나타나야 합니다. 여기에서 페이지를 인기 검색어에 할당할 수 있습니다.

검색 결과 페이지에 표시

특정 검색어에 대한 홍보된 검색 결과 목록을 검색하려면 wagtailsearchpromotions_tags 템플릿 태그 라이브러리의 {% get_search_promotions %} 템플릿 태그를 사용할 수 있습니다.

{% load wagtailcore_tags wagtailsearchpromotions_tags %}

...

{% get_search_promotions search_query as search_promotions %}

<ul>
    {% for search_promotion in search_promotions %}
        {% if search_promotion.page %}
            <li>
                <a href="{% pageurl search_promotion.page %}">
                    <h2>{{ search_promotion.page.title }}</h2>
                    <p>{{ search_promotion.description }}</p>
                </a>
            </li>
        {% else %}
            <li>
                <a href="{{ search_promotion.external_link_url }}">
                    <h2>{{ search_promotion.external_link_text }}</h2>
                    <p>{{ search_promotion.description }}</p>
                </a>
            </li>
        {% endif %}
    {% endfor %}
</ul>

저장된 검색어 관리

searchpromotions 모듈은 QueryQueryDailyHits 모델을 통해 검색어 로그와 일일 조회수를 유지합니다.

class wagtail.contrib.search_promotions.models.Query
classmethod get(query_string)

저장된 검색어를 검색하거나 존재하지 않으면 새 검색어를 만듭니다.

add_hit(date=None)

새 레코드를 만들거나 기존 레코드의 조회수를 늘려 검색어에 대한 또 다른 일일 조회수를 기록합니다. 기본적으로 현재 날짜를 사용하지만 선택적 date 매개변수를 전달할 수 있습니다.

예시 검색 뷰

다음은 검색어에 대한 조회수를 기록하는 검색 페이지에 대한 Django 뷰 예시입니다.

from django.template.response import TemplateResponse

from wagtail.models import Page
from wagtail.contrib.search_promotions.models import Query


def search(request):
    search_query = request.GET.get("query", None)

    if search_query:
        search_results = Page.objects.live().search(search_query)
        query = Query.get(search_query)

        # 조회수 기록
        query.add_hit()
    else:
        search_results = Page.objects.none()

    return TemplateResponse(
        request,
        "search/search.html",
        {
            "search_query": search_query,
            "search_results": search_results,
        },
    )

관리 명령

searchpromotions_garbage_collect

./manage.py searchpromotions_garbage_collect

트래픽이 많은 웹사이트에서는 저장된 쿼리 및 일일 조회수 로그가 커질 수 있으며 오래된 레코드를 정리해야 할 수 있습니다. 이 명령은 1주일 이상 된 모든 검색어 로그를 정리합니다(또는 WAGTAILSEARCH_HITS_MAX_AGE 설정을 통해 구성 가능한 일수).