# PostgreSQL로 검색 엔진 만들기

> Clean Markdown view of GeekNews topic #9776. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=9776](https://news.hada.io/topic?id=9776)
- GeekNews Markdown: [https://news.hada.io/topic/9776.md](https://news.hada.io/topic/9776.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2023-07-13T12:34:39+09:00
- Updated: 2023-07-13T12:34:39+09:00
- Original source: [xata.io](https://xata.io/blog/postgres-full-text-search-engine)
- Points: 6
- Comments: 1

## Topic Body

- PostgreSQL 자체 검색 엔진을 만들기 위한 구성 요소 제공
- 주요 구성 요소는 tsvector 및 tsquery 데이터 유형, 일치 연산자 @@, 일치 결과 순위 매기기 함수 및 GIN 인덱스 유형
- tsvector는 정규화된 어휘와 원본 텍스트에서의 위치를 저장
- tsquery는 정규화된 쿼리를 나타내며 논리 연산자를 사용하여 여러 용어를 결합할 수 있음
- GIN 인덱스 유형은 tsvector의 효율적인 쿼리를 위해 사용됨
- ts_rank 및 ts_rank_cd는 용어 빈도와 근접성을 고려하는 순위 매기기 함수
- 관련성 조정을 통해 특정 기준에 따라 검색 결과를 사용자 정의할 수 있음
- 숫자, 날짜 및 정확한 값 부스터를 순위 점수에 추가할 수 있음
- 열 가중치를 할당하여 검색 결과에서 특정 용어를 우선시할 수 있음
- 제목 열에 setweight를 사용하면 "jedi"라는 단어가 포함된 영화 제목의 순위가 향상됨
- PostgreSQL은 직접적으로 퍼지 검색이나 오타 허용을 지원하지 않지만 유사성이나 Levenshtein 거리를 사용하여 구현할 수 있음
- 사용자가 검색 범위를 좁히는 데 도움이 되는 패싯 검색은 카테고리 정의 또는 알고리즘을 사용하여 PostgreSQL에서 구현할 수 있음
- 이 기사는 Elasticsearch와의 자세한 비교가 제2부에서 이루어질 것을 언급하며 마무리됨

## Comments



### Comment 17281

- Author: neo
- Created: 2023-07-13T12:34:39+09:00
- Points: 1

###### [Hacker News 의견](http://news.ycombinator.com/item?id=36699016) 
- PostgreSQL와 Elasticsearch를 비교하는 제2부에 대한 기대감
- CRUD 및 검색을 위해 PostgreSQL과 Elasticsearch를 동기화하는 노력을 과소평가했습니다.
- 검색 엔진은 빠른 검색 속도가 필요합니다. 이는 단순히 이론상으로만 중요한 것이 아닙니다.
- 기본적인 CS 알고리즘과 하드웨어 활용으로 기본 데이터베이스와 검색 엔진을 쉽게 생성할 수 있습니다.
- 검색의 주관적인 특성이 가장 큰 도전입니다.
- Postgres는 임베딩을 통해 관련 콘텐츠를 찾기 위해 pgvector와 결합될 수 있습니다.
- Postgres 내부 검색은 CPU 부하가 크며, 트랜잭션 업데이트가 우선되어야 합니다.
- ES와 Solr 클러스터는 재인덱싱 중에 높은 CPU 사용률로 작동합니다.
- 검색, 재귀 조인 및 벡터를 위한 PG 확장은 사이드 프로젝트에 재미있고 간단합니다.
- SQLite도 고급 인덱싱 및 어간 추출 기능을 제공합니다.
- 비즈니스 로직을 데이터베이스로 추상화하지만, 트레이드오프는 언급되지 않았습니다.
- 특정 북마크된 사이트를 위해 사용자 정의 검색 엔진을 실행하는 것을 고려하고 있습니다.
- Postgres/Elasticsearch 또는 상용 솔루션을 선택해야 할지에 대한 호기심이 있습니다.
- "고급"이라는 단어는 긍정적인 지표로 간주됩니다.
