저자는 블로그 게시물 제목에 대한 전체 텍스트 검색을 PostgreSQL에서 최적화하는 방법을 설명합니다. 처음에는 `to_tsvector`를 동적으로 사용하여 성능 저하가 발생했습니다. 성능을 개선하기 위해 pre-processed tsvectors를 저장하는 `search_vector` 열을 추가하고 GIN을 사용하여 인덱싱했습니다. 이렇게 하면 `to_tsquery`를 사용하는 검색이 크게 속도 향상되었습니다. PostgreSQL의 `ts_rank` 함수는 결과의 순위를 제공하지만, 위치 기반의 순위는 없습니다. `POSITION` 함수를 사용하여 제목 내의 검색어의 위치를 확인했습니다. `ts_rank`와 위치의 역수를 결합하여 더 나은 관련 점수를 위한 사용자 지정 순위를 생성했습니다. 0으로 나누는 것을 피하기 위해 소규모 조정이 필요합니다. 최종 쿼리는 이 결합 순위에 따라 결과를 정렬합니다. 이 솔루션은 싱글 텀 검색에 잘 작동합니다. 그러나 다중 텀 검색에는 `POSITION`의 제약 사항과 `to_tsquery`의 유연성에 대한 주의가 필요합니다. 저자는 관련 PostgreSQL 문서에 대한 링크를 제공합니다.
dev.to
PostgreSQL Full Text Search Rank by Position
