구현 목표:
create table t (s text);
이 테이블에서
select * from t where s like '%bcdef%'
와 같은 쿼리를 사용함에 있어 특정 index를 사용할 수 있게 한다.
(이 목표는 7.2 버전의 todo라고 하네요)
차선책:
이것을 구현하기위해서 db의 저수순 index 처리에 대한 새 방법이 나와야하는지라,
새 버전이 나오기 전까지는 사용을 할 수 없기에,
차선책으로 다음 방법을 사용해 볼까 합니다.
t 테이블에 대한 full text index 테이블(t_fti)을 따로 하나 만들고,
검색을 할 때는 t 테이블과 t_fti 테이블을 join을 한다.
create table t_fti (s text, id oid);
select b.* from t_fti a, t b where b.s = '가나다' and b.id = a.oid;
이러한 쿼리라면, full text index를 구현해 낼 수 있을 것같습니다.
이때, t_fti 의 s 필드는 다음과 같이 입력되면 되겠지요.
가령, t.s 가 '안녕하세요' 이면,
t_fti 의 테이블 내용은
s : id
///////////
안 : 1000
안녕 : 1000
안녕하 : 1000
안녕하세 : 1000
안녕하세요 : 1000
개발방법:
1. contrib 디렉토리에 있는 fulltextindex 모듈을 해킹한다.
(현재 이 모듈을 영어만 처리가 가능합니다)
이 경우는 한글만 되게 해킹을 한다는 것은 시간 낭비일 것같고,
그렇다고, PostgreSQL에서 지원하는 다국어를 모두 고려해서 생각한다면,
개발 기간이 너무 걸릴것같습니다.(제 실력으로는)
2. 간단히(?) trigger를 만들어서 PostgreSQL의 자체 스트링 함수들을
이용하는 방법입니다. 이 방법을 사용하면, 다국어 문자열 처리에 대한
고민을 하지 않아도 되겠지요. 서버에서 그 처리를 해줄 터이니.
|