토토 꽁 머니 9.3.25 문서 | ||||
---|---|---|---|---|
토토 사이트 : 문서 : 9.3 : pgstattuple | PostgreSQL : 문서 : 9.3 : 추가 제공 배트맨 토토 | 부록 F. 추가 제공된 모듈 | 롤 토토 PostgreSQL : 문서 : 9.3 : Postgres_FDW |
thePG_TRGM모듈은 함수를 제공합니다 및 영숫자 텍스트의 유사성을 결정하기위한 연산자 Trigram 매칭 및 인덱스 운영자 클래스를 기반으로 비슷한 문자열을 빠르게 검색하는 지원.
Trigram은 3 개의 연속 문자 그룹입니다. 문자열. 계산하여 두 줄의 유사성을 측정 할 수 있습니다. 그들이 공유하는 트리 그램의 수. 이 간단한 아이디어는 그 것으로 밝혀졌습니다 많은 사람들의 단어의 유사성을 측정하는 데 매우 효과적입니다. 자연 언어.
참고 : PG_TRGM비 단어를 무시합니다 a에서 트리 그램을 추출 할 때 문자 (비 알파늄 성) 끈. 각 단어는 두 개의 공간이 접두사와 하나씩있는 것으로 간주됩니다. 공간에 포함 된 트리 그램 세트를 결정할 때 접미사 문자열. 예를 들어, 문자열의 트리 그램 세트"cat"is"C", "CA", "cat"및"at". 세트 문자열의 트리 그램"foo | bar"is"f", "fo", "foo", "oo", "B", "BA", "bar"및"ar".
PG_TRGM모듈에 표시테이블 F-24, 연산자표 F-25.
표 F-24.PG_TRGM기능
기능 | 반환 | 설명 |
---|---|---|
유사성 (텍스트, 텍스트) |
Real | 두 인수가 얼마나 유사한지를 나타내는 숫자를 반환합니다. 이다. 결과 범위는 0입니다 (두 사람이 문자열은 완전히 다른 것입니다. 문자열은 동일합니다). |
show_trgm (텍스트) |
텍스트 [] | 지정된 문자열에 모든 트리 그램의 배열을 반환합니다. (안에 연습은 디버깅을 제외하고는 거의 유용하지 않습니다.) |
show_limit () |
Real | 현재 유사한 임계 값을 반환합니다.%운영자. 이것은 사이의 최소 유사성을 설정합니다 그들에게 충분히 비슷한 것으로 간주 될 두 단어 예를 들어 서로의 철자가 있습니다. |
set_limit (real) |
Real | |%운영자. 임계 값은 사이에 있어야합니다 0 및 1 (기본값은 0.3). 통과 된 동일한 값을 반환합니다. |
thePG_TRGM모듈은 요점을 제공합니다 인덱스를 통해 색인을 생성 할 수있는 진 인덱스 운영자 클래스 매우 빠른 유사성 검색을위한 텍스트 열. 이것들 인덱스 유형은 위에서 설명한 유사성 연산자를 지원합니다 또한 트리 그램 기반 인덱스 검색을 지원합니다좋아요, ilike, ~and~*쿼리. (이것들 인덱스는 평등이나 간단한 비교 연산자를 지원하지 않으므로 일반 B- 트리 색인도 필요할 수도 있습니다.)
예 :
테이블 생성 test_trgm (t text); GIST (t gist_trgm_ops)를 사용하여 test_trgm에서 인덱스 trgm_idx를 만듭니다.
또는
gin (t gin_trgm_ops)을 사용하여 test_trgm에서 인덱스 trgm_idx 생성;
이 시점에서에 대한 색인이 있습니다.t유사성에 사용할 수있는 열 수색. 일반적인 쿼리는입니다.
선택 t, 유사성 (t, 'Word') sml로 test_trgm에서 여기서 t % 'Word' sml desc, t; 주문
이것은 텍스트 열의 모든 값을 반환합니다. 충분히Word, 최고 일치에서 최악으로 정렬되었습니다. 인덱스는 만들기 위해 사용됩니다 이것은 매우 큰 데이터 세트에서도 빠른 작업입니다.
위의 쿼리의 변형은
select t, t <-- 'Word' Dist test_trgm에서 Dist Limit 10의 주문;
이것은 GIST 인덱스에 의해 상당히 효율적으로 구현 될 수 있지만 진 인덱스가 아닙니다. 일반적으로 첫 번째 공식을 이길 것입니다 가장 가까운 경기 중 소수만 원합니다.
시작토토 꽁 머니9.1, 이 인덱스 유형은에 대한 색인 검색도 지원합니다.좋아요andilike예
선택 *에서 test_trgm에서 t where '%foo%bar';
토토 꽁 머니에서 트리 그램을 추출하여 인덱스 토토 꽁 머니이 작동합니다. 문자열과 인덱스에서 이것들을보고 있습니다. 트리 그램이 많을수록 토토 꽁 머니 문자열은 인덱스 토토 꽁 머니이 더 효과적입니다. 같지 않은 b- 트리 기반 토토 꽁 머니, 토토 꽁 머니 문자열은 필요하지 않습니다 좌익.
시작토토 꽁 머니9.3, 이 인덱스 유형은 또한 인덱스 검색을 지원합니다 일반 표현식 일치 (~및~*연산자), 예를 들어
선택 *에서 test_trgm에서 t ~ '(foo | bar)';
인덱스 토토 꽁 머니은 일반에서 트리 그램을 추출하여 작동합니다. 표현식과 색인에서 이것들을 바라보십시오. 더 정규 표현에서 추출 할 수있는 트리 그램, 인덱스 토토 꽁 머니이 더 효과적입니다. B- 트리 기반 토토 꽁 머니과 달리 토토 꽁 머니 문자열은 왼쪽 고정 할 필요가 없습니다.
두 가지 모두Like및 일반 표현 토토 꽁 머니, 추출 가능한 트리그램이없는 패턴을 명심하십시오. 전체 인덱스 스캔으로 변성됩니다.
GIST와 GIN 인덱싱 사이의 선택은 상대에 따라 다릅니다. 논의 된 GIST 및 GIN의 성능 특성 다른 곳. 경험상, 진 지수는 검색이 더 빠릅니다. 요지 지수이지만 구축 또는 업데이트가 느리게 진행됩니다. 그래서 진이 낫습니다 정적 데이터 및 종종 업데이트 된 데이터에 대한 GIST에 적합합니다.
Trigram 매칭은 함께 사용될 때 매우 유용한 도구입니다. 전체 텍스트 색인으로. 특히 인식하는 데 도움이 될 수 있습니다 직접 일치하지 않을 입력 단어가 전문 검색 메커니즘.
첫 번째 단계는 모든 것을 포함하는 보조 테이블을 생성하는 것입니다. 문서의 독특한 단어 :
선택한 단어로 테이블 단어를 작성하십시오 ts_stat ( 'select to_tsvector (' 'simple' ', bodytext) 문서에서');
여기서문서는 테이블입니다
텍스트 필드BodyText우리가 원합니다
찾다. 사용 이유단순구성to_tsvector
함수는 언어 별 구성을 사용하는 대신 IS입니다
우리는 원본 (지정되지 않은) 단어의 목록을 원한다.
다음, 단어 열에서 트리 그램 색인 생성 :
gin을 사용하여 단어에서 index words_idx 만들기 (Word gin_trgm_ops);
지금, aselect쿼리와 유사합니다 이전 예제는 철자 철자를 제안하는 데 사용될 수 있습니다. 사용자 검색 용어의 단어. 유용한 추가 테스트는이를 요구하는 것입니다 선택된 단어는 철자와 비슷한 길이입니다. 단어.
참고 :이후단어테이블 별도의 정적 테이블로 생성되었으므로 주기적으로 재생되어 합리적으로 최신 상태로 유지됩니다 문서 컬렉션과 함께. 정확히 전류를 유지하는 것은 일반적으로입니다 불필요한.
GIST 개발 사이트http : //www.sai.msu.su/~megera/postgres/gist/
Tsearch2 개발 사이트http : //www.sai.msu.su/~megera/postgres/gist/tsearch/v2/
Oleg Bartunov<oleg@sai.msu.su
, 모스크바,
모스크바 대학교, 러시아
Teodor Sigaev<teodor@sigaev.ru
, 모스크바,
Delta-Soft Ltd., 러시아
문서 : Christopher Kings-Lynne
이 모듈은 러시아 모스크바에있는 Delta-Soft Ltd.가 후원합니다.
이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
pgstattuple | PostgreSQL : 문서 : 9.3 : 추가 제공 배트맨 토토 | postgres_fdw |