이 문서는 지원되지 않는 버전의 스포츠 토토 베트맨을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : F.33. PG_TRGM - Trigram 매칭을 사용한 텍스트의 범퍼카 토토 지원버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.35. pg_trgm

thePG_TRGM모듈 제공 유사성을 결정하기위한 기능 및 운영자ASCII영숫자 텍스트 기반 Trigram 매칭 및 인덱스 운영자 클래스에서 비슷한 문자열을 빠르게 검색하는 지원.

F.35.1. Trigram (또는 Trigraph) 개념

Trigram은 3 개의 연속 문자 그룹입니다. 문자열에서. 우리는 두 줄의 유사성을 측정 할 수 있습니다 그들이 공유하는 트리 그램의 수를 계산합니다. 이 간단한 아이디어 유사성을 측정하는 데 매우 효과적인 것으로 밝혀졌습니다. 많은 자연 언어로 된 단어.

참고 :문자열에는 두 개의 공간이있는 것으로 간주됩니다 세트를 결정할 때 접두사 및 하나의 공간이 접근 한 공간 문자열에 포함 된 트리 그램. 예를 들어, 세트 문자열의 트리 그램"cat"is"C", "CA", "cat""at".

F.35.2. 기능 및 운영자

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). 통과 된 동일한 값을 반환합니다.

표 F-25.PG_TRGM운영자

운영자 반환 설명
텍스트 % 텍스트 부울 반환trueif 인수는 비슷한 유사성을 가지고 있습니다 현재 유사성 임계 값에 의해 설정된set_limit.
텍스트 <-- 텍스트 Real 반환"거리"인수들 사이에서, 그것은 하나의 뺀입니다.유사성 ()value.

F.35.3. 인덱스 지원

thePG_TRGM모듈은 요점을 제공합니다 그리고 당신이 당신이 매우 빠른 목적으로 텍스트 열에 대한 색인 유사성 검색. 이러한 색인 유형은 다음을 지원합니다 위에서 설명한 유사성 연산자 및 추가 지원 트리 그램 기반 인덱스 검색좋아요andilike쿼리. (이 지수는 그렇습니다 평등이나 간단한 비교 연산자를 지원하지 않으므로 귀하에게 일반 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,이 인덱스 유형은 인덱스 검색을 지원합니다.Likeandilike, 예를 들어

선택 *에서 test_trgm에서 t where '%foo%bar';

인덱스 검색은 트리 그램을 추출하여 작동합니다 문자열을 검색 한 다음 인덱스에서 이것을 찾아보십시오. 더 검색 문자열의 트리 그램, 인덱스가 더 효과적입니다. 검색은입니다. B-Tree 기반 검색과 달리 검색 문자열에는 필요합니다 좌회전하지 않습니다.

GIST와 GIN 인덱싱 사이의 선택은 Gist와 Gin의 상대적 성능 특성 다른 곳에서 논의했습니다. 경험상 진수 지수가 더 빠릅니다. GIST 지수보다 검색하지만 빌드 또는 업데이트가 느리게 진행됩니다. 그래서 진은 정적 데이터에 더 적합하고 자주 업데이트 된 경우 요점이 더 적합합니다. 데이터.

F.35.4. 텍스트 검색 통합

Trigram 매칭은 사용될 때 매우 유용한 도구입니다. 전문 지수와 함께. 특히 도움이 될 수 있습니다 일치하지 않을 입력 된 입력 단어를 인식하려면 전체 텍스트 검색 메커니즘으로 직접.

첫 번째 단계는 포함 된 보조 테이블을 생성하는 것입니다. 문서의 모든 독특한 단어 :

선택한 단어로 테이블 단어를 작성하십시오
        ts_stat ( 'select to_tsvector (' 'simple' ', bodytext) 문서에서');

여기서문서는 테이블입니다 텍스트 필드가 있습니다BodyText우리 스포츠 토토 베트맨하고 싶습니다. 사용 이유단순to_tsvectora를 사용하는 대신 함수 언어 별 구성은 우리가 목록을 원한다는 것입니다. 원본 (예정되지 않은) 단어.

다음, 단어 열에서 트리 그램 색인 생성 :

gin을 사용하여 단어에서 index words_idx 만들기 (Word gin_trgm_ops);

지금, aselect쿼리와 유사합니다 이전 예제는 철자를 제안하는 데 사용될 수 있습니다 사용자 검색 용어로 철자가 잘못된 단어. 유용한 추가 테스트입니다 선택한 단어도 비슷한 길이를 요구하기 위해 틀린 단어로.

참고 :이후단어테이블은 별도의 정적 테이블로 생성되었습니다. 주기적으로 재생되어야합니다. 문서 컬렉션과 합리적으로 최신. 유지 정확히 현재는 일반적으로 불필요합니다.

F.35.6. 저자

Oleg Bartunov, 모스크바, 모스크바 대학교, 러시아

Teodor Sigaev, 모스크바, 델타-소프트 Ltd., 러시아

문서 : Christopher Kings-Lynne

이 모듈은 모스크바의 Delta-Soft Ltd.가 후원합니다. 러시아 제국.