django haystack

1. settings.py 설정


brand 객체가 생성되거나 삭제될 때마다,
index 파일을 자동 최신화하기 위해 아래와 같이 설정했다.

여기서 중요한 점은 업데이트 될때는 해당되지 않는다는 점이다.


HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
        'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
    },
}
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'



2. Create / Delete / Update 검증

signal의 도움으로
관리자가 매번 shell에 아래와 같이 입력할 필요가 없는 것인가.

python manage.py rebuild_index

실제 서버를 배포한 이후에 매 업데이트마다 해당 명령어를 입력하는 것은 너무나 비효율적이며, 서비스 운영중에 인덱스를 업데이트하는 작업은 여러 위험요소가 있다.



위의 문제점에서 탈피하기 위해 signal 기능을 활용한 index 자동 업데이트 기능을 적용해보자.
공식 문서에도 나와있다.
출처: https://django-haystack.readthedocs.io/en/master/signal_processors.html



현재 역인덱싱을 위하여 인덱스 파일을 관리해주고 있는 디렉토리명은

아래 그림과 같이 whoosh_index다.


그 디렉토리 내부에는 아래와 같은 파일들이 있다.



장고 쉘에서 Brand 객체 하나를 삭제해보자.

그 전에 우선 현재 Brand 쿼리셋의 총 개수 먼저 확인하자.

이제 가장 마지막 Brand 객체를 삭제해보자.

이제 총 개수는 120개가 되었다.



과연 whoosh_index 디렉토리 내부의 파일들도 삭제된 결과값이 반영되었을까??

확인해보자.

디렉토리 내부의 파일 숫자가 변경됐다.

_MAIN_2.toc -->_MAIN_3.toc


좀 더 확실하게 검증할 필요가 있다.

shell에서도 확인해보자.

python manage.py shell
from whoosh.index import open_dir
ix=open_dir('whoosh_index')
list(ix.searcher().documents())



( 이 영역은 나를 위한 간편 정리 )

from whoosh.index import open_dir
ix=open_dir('haystack_search')
list(ix.searcher().documents())





인덱스가 120번가지 있음을 확인할 수 있다.




마찬가지로
업데이트를 해보자.

python manage.py rebuild_index

명령어를 직접 할 필요없이 새로운 역인덱싱 파일로 업데이트 됐다.

참고 출처: https://medium.com/@whj2013123218/%EC%9E%A5%EA%B3%A0-django-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90-%EA%B2%80%EC%83%89%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-haystack%EA%B3%BC-whoosh%EC%9D%98-%EC%9E%91%EB%8F%99-%EC%9B%90%EB%A6%AC%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC-c349cc7b39d5

좋은 웹페이지 즐겨찾기