Django/view

Django 검색 구현 + 형태소 분석기 이용

두잇 두두 2024. 2. 15. 20:22
728x90

 

코드

#키워드를 먼저 공백 제거
keywords = [q.replace(' ', '') for q in search_keyword.split(' ') if q]
for keyword in keywords.copy(): #반복 시 반복 객체를 보호하기 위해
	keywords += mecab.morphs(keyword) #형태소를 분해해서 keywords에 담아줍니다
    
    keyword_search_query = reduce(
                    operator.or_,
                    [
                        Q(content__icontains=keyword)
                        for keyword in keywords
                    ]
                )

reduce로 누적 만들기
이 예시에서는 content__icontains를 사용하여 keywords 리스트에 있는 각 키워드로 검색하는 Q 객체들을 생성하고, reduce 함수를 이용하여 이를 OR 조건으로 결합한 쿼리를 생성합니다.

최종적으로 keyword_search_query에는 OR 조건이 적용된 쿼리 객체가 저장됩니다.(Q(content__icontains='apple') | Q(content__icontains='orange') | Q(content__icontains='banana'))

sorted(list(set(keywords)), key=lambda k: (query.startswith(k), -len(k)), reverse=True)

sort를 통해서 키워드로 시작하는 것들을 앞으로 땡겨 올 수 있습니다.

 

배운 점

  1. 키워드를 전처리하는 작업과 형태소 분석을 통해 좀 더 좋은 데이터들을 얻는 방법을 배웠습니다.
  2. reduce와 operater을 통해서 or조건문을 반복문 돌리는 법을 배웠습니다.