ICU 경계 분석을 사용한 PostgreSQL 텍스트 검색 파서
전체 텍스트 검색의 첫 번째 단계는 구문 분석 - 문서와 쿼리 텍스트를 개별 토큰 (뚜렷한 단어, 숫자 등)으로 나누는 것입니다. 그러나이 작업이 그렇게 사소하지 않은 언어가 있습니다. 가장 두드러진 예는 동아시아 언어 (예 : 중국어, 일본어, 한국 등)입니다. 여기서 단어는 일반적으로 공백과 구두점으로 분리되지 않습니다. 또 다른 예는 히브리어입니다. 단어는 문장 부호로 분리되지만 일부 문자는 문맥에 따라 구두점 마크로 간주 될 수 있습니다.
PostgreSQL의 전체 텍스트 검색 서브 시스템에 포함 된 기본 파서는 그러한 경우에 다소 불만족스러운 결과를 제공합니다. pg_icu_parser ICU 워드 경계 분석 루틴을 사용하여 소스 텍스트에서 토큰을 추출하는 사용자 정의 전체 텍스트 검색 파서 구현을 제공하는 확장자입니다. 이들은 유니 코드 표준의 부록 29에 지정된 알고리즘을 구현하며 많은 언어에서 합리적인 결과를 제공 할 수 있습니다.
현재 pg_icu_parser 소스 코드에서 구축해야합니다. PostgreSQL을 사용할 수있는 개발 지원 파일 (헤더 등)이 있는지 확인하십시오.
빌드 및 설치, 실행 :
$ make install
이것은 현재 경로에서 발견 된 pg_config 의 첫 번째 인스턴스에 의해 결정된 PostGRESQL 설치에 대해 구축되고 설치됩니다. 특정 설치 (또는 경로가 아닌)를 대상으로합니다.
$ make install PG_CONFIG=/path/to/pg_config
연장은 PGXN에서도 제공됩니다.
확장을 데이터베이스에로드하려면 다음 SQL 명령을 적절한 권한을 가진 사용자로 실행하십시오.
CREATE EXTENSION pg_icu_parser;이것은 현재 스키마에 사용자 정의 텍스트 파서를 등록합니다. 이를 사용하려면 PostgreSQL 매뉴얼에 설명 된대로 텍스트 검색 구성을 작성해야합니다. 예를 들어:
CREATE TEXT SEARCH CONFIGURATION sample (parser = icu_parser);
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR number , ideo, kana WITH simple; 파서에서 방출 할 수있는 토큰 유형은 word , number , kana , ideo 및 blank 입니다. 이는 ICU에서 지원하는 단어 브레이크 태그와 정렬됩니다. 어떤 사전을 사용할 수 있는지에 대한 제한이 없습니다.
pg_icu_parser 단일 구성 매개 변수를 노출시킵니다.
pg_icu_parser.locale 문자열, 선택 사항. 경계 분석 루틴과 함께 사용할 ICU 로케일. 설정하지 않으면 기본값은 en 으로 나타납니다. 일반적으로 로케일에 민감한 단어 경계 감지 규칙이 없으므로이 매개 변수를 설정할 필요가 없습니다. 위에서 설명한 바와 같이, pg_icu_parser 의 주요 강도 대 PostgreSQL에 이미 내장 된 default 파서는 다양한 언어에서 더 나은 토큰 화 결과입니다. 또한 pg_icu_parser 데이터베이스의 로케일 설정 또는 문자를 결정하기위한 기본 운영 체제에 의존하지 않습니다.
그러나 pg_icu_parser 특정 사용 사례에 적합한 지 결정에 영향을 줄 수있는 몇 가지 트레이드 오프가 있습니다.
기본 파서는 URL, 전자 메일 주소, 다양한 종류의 숫자 값 등을 포함한 토큰으로 다양한 패턴을 인식 할 수 있습니다. 반면에 pg_icu_parser 토큰 유형이 훨씬 적으며 (그리고 지원되는 몇 개는 훨씬 더 거칠다) 복잡한 패턴을 감지 할 수 없습니다.
현재 pg_icu_parser ts_headline 기능을 지원하지 않습니다 . 미래에 ...
pg_icu_parser 는 default 파서보다 훨씬 느립니다. 그러나 데이터베이스의 서버 인코딩이 UTF-8 인 경우 빠른 경로가 사용되어 오버 헤드가 줄어 듭니다. 아래 벤치 마크 섹션을 참조하십시오.
제 3 자 확장자로서 pg_icu_parser PostGRESQL 설치를 완전히 제어 할 수있는 경우에만 사용할 수 있습니다. 즉, 관리되는 PostgreSQL 솔루션에서는 사용할 수 없습니다.
다음의 비 과학적 벤치 마크는 기본 파서 대신 pg_icu_parser 사용하여 얼마나 느리게 기대할 수 있는지에 대한 감각을 줄 수 있습니다. 테스트 된 시나리오는 코퍼스의 각 문서의 비 맹장 토큰 수를 계산하는 쿼리입니다. 사용 된 코퍼스는 27,139 개의 짧은 히브리어 기사로 구성된 Haaretz Corpus입니다. 값은 EXPLAIN ANALYZE 에 의해보고 된 바와 같이 10 라운드의 밀리 초의 평균 실행 시간입니다.
| 서버 인코딩 | default | pg_icu_parser | 감속 |
|---|---|---|---|
| UTF-8 | 2,566.9974 | 2,884.3696 | -12.3% |
| ISO-8859-8 | 3,529.6487 | 5,059.3616 | -43.3% |
물론 다른 환경과 다른 Corpora는 다른 결과를 가질 수 있습니다, YMMV.
pg_icu_parser 는 Mozilla Public License 2.0에 따라 라이센스가 부여됩니다.