| PostgreSQL 9.0.23 문서 | ||||
|---|---|---|---|---|
| 범퍼카 토토 : 문서 : 9.0 : pgstattuple | 위로 | 부록 F. 추가 제공 모듈 | postgresql : 문서 : 9.0 : 토토 사이트 순위 | |
그pg_trgm모듈은 다음을 제공합니다 유사성을 결정하기 위한 함수 및 연산자ASCII영숫자 텍스트 기반 트라이그램 매칭뿐만 아니라 인덱스 연산자 클래스에 대해서도 유사한 문자열에 대한 빠른 검색을 지원합니다.
트라이그램은 연속된 세 문자의 그룹입니다. 문자열에서. 두 문자열의 유사성을 다음과 같이 측정할 수 있습니다. 그들이 공유하는 트라이그램의 수를 세어보세요. 이 간단한 아이디어 유사성을 측정하는 데 매우 효과적인 것으로 나타났습니다. 많은 자연어로 된 단어.
참고:문자열은 두 개의 공백이 있는 것으로 간주됩니다. 세트를 결정할 때 접두사가 붙고 접미사가 하나 추가됩니다. 문자열에 포함된 트라이그램입니다. 예를 들어, 문자열의 트라이그램"고양이"is" c", " ca", "고양이"및"에 ".
표 F-22.pg_trgm함수
| 기능 | 반품 | 설명 |
|---|---|---|
유사성(텍스트,
텍스트) |
실제 | 두 항목이 얼마나 유사한지를 나타내는 숫자를 반환합니다. 인수는. 결과의 범위는 0입니다. (두 문자열이 완전히 연결되었음을 나타냅니다. 유사하지 않음)을 1로(두 문자열이 동일함을 나타냄) 동일). |
show_trgm(텍스트) |
텍스트[] | 주어진 영역의 모든 트라이그램 배열을 반환합니다. 문자열. (실제로 이것은 다음을 제외하고는 거의 유용하지 않습니다. 디버깅.) |
show_limit() |
진짜 | 다음에서 사용하는 현재 유사성 임계값을 반환합니다.%연산자. 이는 다음을 설정합니다. 두 단어 사이의 최소 유사성은 각각의 철자가 틀릴 정도로 유사한 것으로 간주됩니다. 예를 들어 기타. |
set_limit(실제) |
실제 | 현재 사용되는 유사성 임계값을 설정합니다 에 의해%연산자. 는 임계값은 0과 1 사이여야 합니다(기본값은 0.3). 전달된 동일한 값을 반환합니다. |
그pg_trgm모듈은 GiST를 제공합니다 및 GIN 인덱스 연산자 클래스를 생성할 수 있습니다. 매우 빠른 작업을 위해 텍스트 열에 대한 색인을 생성합니다. 유사성 검색. 이러한 인덱스 유형은 다음을 지원합니다.%유사성 연산자(다른 연산자 없음, 따라서 일반 B-트리 인덱스도 필요할 수 있습니다.
예:
CREATE TABLE test_trgm (t 텍스트); gist를 사용하여 test_trgm에서 trgm_idx 인덱스 생성(t gist_trgm_ops);
또는
gin을 사용하여 test_trgm에서 trgm_idx 인덱스 생성(t gin_trgm_ops);
이 시점에서 당신은 다음에 대한 색인을 갖게 될 것입니다.t유사성을 위해 사용할 수 있는 열 검색 중입니다. 일반적인 쿼리는 다음과 같습니다.
SELECT t, 유사성(t, '단어') AS sml test_trgm에서 어디에서 % '단어' sml DESC로 주문, t;
이것은 텍스트 열의 모든 값을 반환합니다. 충분히 유사단어, 가장 잘 일치하는 것부터 가장 나쁜 것까지 정렬되었습니다. 인덱스는 다음을 수행하는 데 사용됩니다. 이는 매우 큰 데이터 세트에서도 빠른 작업입니다.
GiST와 GIN 인덱싱 사이의 선택은 다음에 따라 다릅니다. GiST와 GIN의 상대적인 성능 특성은 다음과 같습니다. 다른 곳에서 논의되었습니다. 경험상 GIN 지수가 더 빠릅니다. GiST 인덱스보다 검색하지만 구축 또는 업데이트 속도가 느립니다. 그래서 GIN은 정적 데이터에 더 적합하고 GiST는 자주 업데이트되는 데이터에 더 적합합니다. 데이터.
트라이그램 매칭은 다음에서 사용될 때 매우 유용한 도구입니다. 전체 텍스트 색인과 결합됩니다. 특히 도움이 될 수 있습니다 일치하지 않는 철자가 틀린 입력 단어를 인식합니다. 전체 텍스트 검색 메커니즘을 통해 직접적으로.
첫 번째 단계는 다음을 포함하는 보조 테이블을 생성하는 것입니다. 문서의 모든 고유 단어:
CREATE TABLE 단어 AS SELECT 단어 FROM
ts_stat('SELECT to_tsVector(''simple'', bodytext) FROM 문서');
어디에서문서테이블은 다음과 같습니다
텍스트 필드가 있습니다.본문우리는
토토 커뮤니티을 원합니다. 를 사용하는 이유간단한다음으로 구성to_ts벡터함수를 사용하는 대신
언어별 구성에서는 다음 목록을 원한다는 것입니다.
원래(어간 없는) 단어.
다음으로, 단어 열에 트라이그램 인덱스를 생성하십시오:
gin(word gin_trgm_ops)을 사용하여 단어에 word_idx 인덱스 생성;
이제, a선택다음과 유사한 쿼리 이전 예를 사용하여 철자를 제안할 수 있습니다. 사용자 검색어에 철자가 틀린 단어. 유용한 추가 테스트는 다음과 같습니다. 선택한 단어의 길이도 비슷하도록 요구 철자가 틀린 단어에.
참고:이후단어테이블이 별도의 정적 테이블로 생성되었습니다. 남아 있도록 주기적으로 재생성해야 합니다. 문서 수집과 관련하여 합리적으로 최신 상태입니다. 유지 정확히 최신 정보는 일반적으로 불필요합니다.
GiST 개발 사이트http://www.sai.msu.su/~megera/postgres/gist/
Tsearch2 개발 사이트http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/
올렉 바르투노프<oleg@sai.msu.su,
모스크바, 모스크바 대학교, 러시아
테오도르 시가예프<teodor@sigaev.ru,
모스크바, Delta-Soft Ltd., 러시아
문서: 크리스토퍼 킹스-린
이 모듈은 모스크바의 Delta-Soft Ltd.에서 후원합니다. 러시아.