▲GN⁺ 2025-04-10 | parent | ★ favorite | on: PostgreSQL 풀 텍스트 검색: 제대로 하면 빠르다(느리다는 오해 해소)(blog.vectorchord.ai)Hacker News 의견 pg_search의 유지보수자로서, Postgres 문서에 따르면 Neon/ParadeDB 기사와 여기서 사용된 전략 모두 유효한 대안으로 제시됨 Postgres FTS의 문제는 단일 쿼리를 최적화하는 것이 아니라 다양한 실제 쿼리에 대해 Elastic 수준의 성능을 제공하는 것임 pg_search는 후자의 문제를 해결하기 위해 설계되었으며, 벤치마크도 이를 반영함 Neon/ParadeDB 벤치마크는 총 12개의 쿼리를 포함하며, 현실적인 사용 사례에서는 비현실적임 pg_search는 다양한 "Elastic 스타일" 쿼리와 Postgres 타입에 대해 간단한 인덱스 정의만으로 작동함 tsvector를 실시간으로 계산하는 것은 큰 실수임 Postgres FTS를 개인 프로젝트에 구현했을 때, 문서를 읽고 지침을 따랐음 문서는 기본 비최적화 사례를 만들고 최적화하는 과정을 명확히 설명함 이 실수를 저지른 사람은 문서를 읽지 않았거나 Postgres FTS를 잘못 표현하려는 의도가 있는 것 같음 모든 것을 Postgres에 넣으려는 경향을 이해하지 못하겠음 Postgres-native의 전체 텍스트 검색 구현을 더 많이 보게 되어 기쁨 대안 솔루션(lucene/tantivy)은 불변 세그먼트에 맞춰 설계되어 Postgres 힙 테이블과 결합하면 더 나쁜 솔루션이 될 수 있음 설명 계획이 없어서 무슨 일이 일어나는지 이해하기 어려움 쿼리가 인덱스를 사용하면 실시간 tsvector 재검사는 일치 항목에만 적용되며 벤치마크 쿼리는 LIMIT 10이므로 재검사가 적음 쿼리 조건이 2개의 gin 인덱스에 조건을 가지고 있어, 계획자가 모든 일치 항목을 먼저 재검사하는 것 같음 몇 년 전, 네이티브 FTS를 사용하고 싶었으나 실패했음 수천 개의 삽입/초가 있는 테이블에서 전체 업데이트가 느려져 트랜잭션이 시간 초과됨 인덱스를 추가했으나 두 번째 인덱스가 완료되자 시스템에서 시간 초과가 발생함 인덱스를 다시 삭제해야 했고, 실제 FTS 성능을 테스트할 기회를 얻지 못했음 pg_search와 vchord_bm25 확장 RPM/DEB를 패키징했음 스스로 벤치마크를 하고 싶은 사람들을 위해 링크를 제공함 많은 팀이 Elasticsearch나 Meilisearch로 바로 이동하는 것을 보았음 적절히 사용하면 네이티브 PG FTS에서 많은 성능을 얻을 수 있음 SQLite + FTS5 + Wasm을 사용하여 브라우저에서 유사한 성능을 얻을 수 있을지 궁금함 1천만 개의 레코드는 장난감 데이터셋임 전체 Wikipedia나 2022년 이전 Reddit 댓글과 같은 큰 텍스트 데이터셋이 벤치마크에 더 적합함 2008년경 처음으로 pg 전체 텍스트를 사용했음 Postgres 전체 텍스트 검색의 문제는 너무 느리다는 것이 아니라 너무 유연하지 않다는 것임 간단한 검색을 추가하는 데는 좋지만 검색을 조정하려면 부족함 Solr와 Elasticsearch는 복잡한 인덱스와 검색 처리를 설정할 수 있음 Postgres는 이러한 기능을 채택할 수 있지만, 현재는 아무것도 제공하지 않음 Postgres는 공백을 기준으로 분할하며, 수동으로 불용어와 어간을 사용할 수 있음 필드 가중치에 기반한 검색 점수 매기기가 불가능함 대안과 비교했을 때 장난감 시스템임
Hacker News 의견
pg_search의 유지보수자로서, Postgres 문서에 따르면 Neon/ParadeDB 기사와 여기서 사용된 전략 모두 유효한 대안으로 제시됨
tsvector를 실시간으로 계산하는 것은 큰 실수임
모든 것을 Postgres에 넣으려는 경향을 이해하지 못하겠음
Postgres-native의 전체 텍스트 검색 구현을 더 많이 보게 되어 기쁨
설명 계획이 없어서 무슨 일이 일어나는지 이해하기 어려움
몇 년 전, 네이티브 FTS를 사용하고 싶었으나 실패했음
pg_search와 vchord_bm25 확장 RPM/DEB를 패키징했음
많은 팀이 Elasticsearch나 Meilisearch로 바로 이동하는 것을 보았음
1천만 개의 레코드는 장난감 데이터셋임
2008년경 처음으로 pg 전체 텍스트를 사용했음