PostgreSQL 에서 영문 혼합 단어 특수 규칙 (중국어 단어, 영어 단어) - 중 영 분명

1720 단어
라벨
PostgreSQL, 정규 표현 식, 단어, 분할
배경
어떤 업무 시스템 에 이런 요구 가 있다.
단 어 를 나 눈 후에 영 어 는 단어 형식 으로 나타 나 고 중국어 (다 바이트 문자) 는 단일 문자 로 나타 나 도록 요구한다.
이런 수 요 를 어떻게 실현 해 야 합 니까?
사용자 정의 단어 규칙 UDF
절 사의 일부 함 축 된 매개 변 수 는 참고 하 시기 바 랍 니 다.
'아 리 클 라 우 드 PostgreSQL zhparser 를 사용 할 때 알 수 없 는 몇 가지 인자'
한 글자 가 나 오 려 면 다 중 바이트 문자 에 대해 서 는 한 글자 로 설정 해 야 합 니 다.
postgres=# set zhparser.multi_zall=on;  
postgres=# SELECT array_to_tsvector(array_agg(token)) from ts_debug('testzhcfg', '        hello digoal')   
           where (char_length(token)=1 and octet_length(token)<>1 ) or (char_length(token)=octet_length(token));  
                  array_to_tsvector                    
-----------------------------------------------------  
 'digoal' 'hello' ' ' ' ' ' ' ' ' ' ' ' ' ' '  
(1 row)  

이상 은 업무 수 요 를 만족 시 키 고 중국 어 는 글자, 영 어 는 단어 에 따른다.
다음은 UDF 를 써 서 컴 파일 해서 사용 합 니 다.
create or replace function udf_to_tsvector(regconfig,text) returns tsvector as $$  
  SELECT array_to_tsvector(array_agg(token)) from ts_debug($1, $2)   
    where (char_length(token)=1 and octet_length(token)<>1 ) or (char_length(token)=octet_length(token));  
$$ language sql strict immutable;  

테스트, 업무 수요 만족
postgres=# select udf_to_tsvector('testzhcfg', '        hello digoal');  
                   udf_to_tsvector                     
-----------------------------------------------------  
 'digoal' 'hello' ' ' ' ' ' ' ' ' ' ' ' ' ' '  
(1 row)  

좋은 웹페이지 즐겨찾기