Skip to content

본 프로젝트는 postgres 문자열 검색 기능 사용을 위한 tsvector, tsquery 의 간략한 사용예시를 다룹니다.

Notifications You must be signed in to change notification settings

ddochea0314/example-postgres-text-search-types

Repository files navigation

example-postgres-text-search-types

본 프로젝트는 postgres 문자열 검색 기능 사용을 위한 tsvector, tsquery 의 간략한 사용예시를 다룹니다.

데이터 초기 구축하기

아래 순서에 따라 데이터를 구축합니다.

일부 환경에 따라 관리자 권한으로 실행해야할 수 있습니다. (sudo su)

1. npm 인스톨 명령어 실행

npm i

2. env 설정

db 접속 정보를 설정합니다. example 파일값을 토대로 .env 파일을 수정하세요.

cp .env.example .env

3. 데이터 insert 처리

아래 명령어로 데이터를 db에 구축하는 스크립트를 실행합니다.

npx ts-node script.ts

tsquery 연산자 종류

  • AND(&) : & 사이에 속한 조건들이 모두 부합한 대상을 필터링 합니다. 예를 들어 세종특별시 & 호려울로 로 조회하면 세종특별시호려울로가 모두 포함되어 있는 tsvector 값으로 필터링합니다.
  • OR(|) : | 사이에 속한 조건들 중 1개라도 부합하면 됩니다. 예를 들어 호려울로 | 대평로 로 조회하면, 호려울로대평로가ㅣ 모두 포함되어 있는 tsvector 값으로 필터링합니다.
  • NOT(!) : 단어 앞에 붙이며, 해당 조건에 부합하지 않는 항목을 대상으로 조회합니다. 예를 들어 !대평시장 의 결과 값은 대평시장을 포함하지 않습니다.
  • FOLLOWED BY(<->) : 앞 뒤 단어의 순서 일치여부를 따집니다. 예를 들어 세종특별시 <-> 호려울로 로 조회하면 세종특별시 다음에 호려울로 순으로 정의된 tsvector 값을 필터링합니다.

AND(&) 와 FOLLOWED BY(<->) 차이점

세종특별시 & 호려울로호려울로 & 세종특별시 는 같은 결과가 조회됩니다. 세종특별시 <-> 호려울로호려울로 <-> 세종특별시 는 조회 결과가 다릅니다.

조회 예시

SELECT rnaddrkor."road_address_id", 
  rnaddrkor."city_name", 
  rnaddrkor."district_name", 
  rnaddrkor."road_name"
FROM rnaddrkor
WHERE to_tsvector('simple', rnaddrkor."city_name" || ' ' 
||  rnaddrkor."district_name" || ' ' 
|| rnaddrkor."road_name") @@ to_tsquery('세종:* & (호려울로 | 대평:*) & !대평시장:*')

예시 결과

road_address_id character varying city_name character varying district_name character varying road_name character varying
1 36110103335079400000900000 세종특별자치시 호려울로
2 36110103335079400001900000 세종특별자치시 호려울로
3 36110103335079400002900000 세종특별자치시 호려울로
4 36110103335079400004200000 세종특별자치시 호려울로
5 36110103335079400004500000 세종특별자치시 호려울로
6 36110103335079400005100000 세종특별자치시 호려울로
7 36110104335079500000300000 세종특별자치시 대평로
8 36110104335079500002700000 세종특별자치시 대평로
9 36110104335079500003400000 세종특별자치시 대평로
10 36110104335079500005600000 세종특별자치시 대평로
11 36110104335079500007100000 세종특별자치시 대평로
12 36110104335079500007500000 세종특별자치시 대평로
13 36110104335079500008000000 세종특별자치시 대평로
14 36110104335079500008300000 세종특별자치시 대평로
15 36110104335079500008600000 세종특별자치시 대평로
16 36110104335079500008700000 세종특별자치시 대평로
17 36110104485319100001000000 세종특별자치시 대평1길
18 36110104485319100001700000 세종특별자치시 대평1길
19 36110104485319100001900000 세종특별자치시 대평1길
20 36110104485319100002200000 세종특별자치시 대평1길
21 36110104485319100002700000 세종특별자치시 대평1길
22 36110104485319100003700000 세종특별자치시 대평1길
23 36110104485319100003800000 세종특별자치시 대평1길
24 36110104485319300001000000 세종특별자치시 대평3길
25 36110104485319300001700000 세종특별자치시 대평3길
26 36110104485319300001800000 세종특별자치시 대평3길
27 36110104485510800001700000 세종특별자치시 대평4길
28 36110104485510800003300000 세종특별자치시 대평4길

참조

https://www.postgresql.org/docs/current/datatype-textsearch.html https://www.postgresql.org/docs/current/textsearch-intro.html#TEXTSEARCH-DOCUMENT

About

본 프로젝트는 postgres 문자열 검색 기능 사용을 위한 tsvector, tsquery 의 간략한 사용예시를 다룹니다.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published