개발 버전 :Devel
지원되지 않은 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3
이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

12.6. 토토 베이

토토 베이은 검색에서 고려해서는 안되는 단어를 제거하는 데 사용됩니다 (단어 중지) 및 to정상화같은 단어의 다른 파생 형식이 일치하도록하는 단어. 성공적으로 정규화 된 단어를 a라고합니다.lexeme. 검색 품질 향상, 정상화 및 정지 단어 제거 외에도의 크기가 줄어 듭니다.tsvector문서 표현으로 성능이 향상됩니다. 정규화는 항상 언어 적 의미를 갖지는 않으며 일반적으로 응용 프로그램 의미에 따라 다릅니다.

정규화의 일부 예 :

  • 언어 -Ispell 토토 베이은 입력 단어를 정규화 된 형태로 줄이려고합니다. Stemmer 토토 베이은 단어 결말 제거

  • url위치는 동등한 URL을 일치시키기 위해 정식화 될 수 있습니다 :

    • in

    • http://www.pgsql.ru/db/mw/

    • in

  • 색상 이름은 16 진수 값으로 대체 될 수 있습니다 (예 :빨간색, 녹색, 블루, 마젠타 -> FF0000, 00FF00, 0000FF, FF00FF

  • 인덱싱 숫자 인 경우 가능한 숫자의 범위를 줄이기 위해 일부 분수 숫자를 제거 할 수 있습니다.3.14159265359, 3.1415926, 3.14소수점 이후 두 자리 만 유지되면 정규화 후 동일합니다.

토토 베이은 토큰을 입력으로 받아들이고 반환하는 프로그램입니다.

  • 입력 토큰이 사전에 알려진 경우 렉시스 배열 (하나의 토큰이 하나 이상의 lexeme을 생산할 수 있음).

  • 단일 Lexeme과TSL_FILTER플래그 세트, 원래 토큰을 다음 사전으로 전달할 새 토큰으로 교체하려면 (이를 수행하는 사전은라고합니다.필터링 토토 베이)

  • 토토 베이이 토큰을 알고 있다면 빈 배열이지만 중지 단어입니다

  • NULL토토 베이이 입력 토큰을 인식하지 못하는 경우

postgresql많은 언어에 미리 정의 된 토토 베이을 제공합니다. 사용자 지정 매개 변수로 새로운 토토 베이을 만드는 데 사용할 수있는 몇 가지 토토 베이 정의 된 템플릿이 있습니다.Contrib/영역postgresql예제 배포.

텍스트 검색 구성은 파서의 출력 토큰을 처리하기 위해 토토 베이 세트와 함께 구문 분석기를 바인딩합니다. 파서가 반환 할 수있는 각 토큰 유형의 경우 별도의 토토 베이 목록은 구성에 의해 지정됩니다.NULL출력 결과를 결정하고 나머지 사전은 상담되지 않습니다. 그러나 필터링 토토 베이은 주어진 단어를 수정 된 단어로 대체 할 수 있으며, 그 후 후속 사전으로 전달됩니다.

토토 베이 목록을 구성하기위한 일반적인 규칙은 먼저 가장 좁고 가장 구체적인 토토 베이을 먼저 배치하는 것입니다.SnowballStemmer 또는단순, 모든 것을 인식합니다. 예를 들어 천문학 별 검색 (Astro_en구성) 토큰 유형을 바인딩 할 수 있습니다asciiword(ASCII Word) 천문학적 용어의 동의어 토토 베이, 일반 영어 토토 베이 및 A.SnowballEnglish Stemmer :

텍스트 검색 구성 Astro_en

필터링 토토 베이은 쓸모없는 끝을 제외하고 목록의 어느 곳에도 배치 할 수 있습니다. 필터링 토토 베이은 나중 사전의 작업을 단순화하기 위해 단어를 부분적으로 정규화하는 데 유용합니다.Unaccent모듈.

12.6.1. 단어 중지

중지 단어는 매우 일반적인 단어이며 거의 모든 문서에 나타나며 차별 값이 없습니다. 따라서 전체 텍스트 검색의 맥락에서 무시할 수 있습니다.athe, 따라서 색인에 저장하는 것은 쓸모가 없습니다. 그러나 단어 중지 단어는의 위치에 영향을 미칩니다.tsvector

select to_tsvector ( '영어', '중지 단어 목록에서');

누락 된 위치 1,2,4는 중지 단어 때문입니다. 중지 단어 유무에 관계없이 문서에 대해 계산 된 순위는 매우 다릅니다.

select ts_rank_cd (to_tsvector ( '영어', '중지 단어 목록에서'), to_tsquery ( 'list & stop'));

특정 토토 베이에 달려 있습니다. 예를 들어,Ispell사전은 먼저 단어를 정상화 한 다음 중지 단어 목록을 봅니다.Snowballstemmers는 먼저 중지 단어 목록을 확인합니다. 다른 행동의 이유는 소음을 줄이려는 시도입니다.

12.6.2. 간단한 토토 베이

the단순토토 베이 템플릿은 입력 토큰을 소문자로 변환하고 중지 단어 파일에 대해 확인하여 작동합니다. 파일에서 발견되면 빈 배열이 반환되어 토큰을 폐기합니다.

다음은를 사용한 사전 정의의 예입니다.단순템플릿 :

텍스트 검색 토토 베이 생성 public.simple_dict (

여기,영어는 중지 단어 파일의 기본 이름입니다. 파일의 이름은입니다.$ sharedir/tsearch_data/el, 여기서$ sharedir의미postgresql설치의 공유 데이터 디렉토리, 종종/usr/local/share/postgresql(사용PG_CONFIG -SHAREDIR확실하지 않은 경우 결정). 파일 형식은 단순히 줄 당 단어 목록입니다.

이제 우리는 토토 베이을 테스트 할 수 있습니다 :

ts_lexize ( 'public.simple_dict', 'yes');

우리는 또한 반환을 선택할 수 있습니다NULL, 중지 단어 파일에 찾을 수없는 경우 하위 기반 단어 대신. 이 동작은 토토 베이을 설정하여 선택됩니다수락매개 변수 tofalse. 예제 계속 :

텍스트 검색 사전 공개 aLter.simple_dict (accept = false);

기본 설정의수락 = true, a 배치하는 것이 유용합니다.단순사전 목록의 끝에있는 사전은 다음 사전으로 전달하지 않기 때문입니다. 거꾸로,수락 = false사전 다음에 하나 이상이있을 때만 유용합니다.

주의

대부분의 토토 베이 유형은 중지 단어의 파일과 같은 구성 파일에 의존합니다. 이 파일필수UTF-8 인코딩에 저장하십시오. 서버로 읽을 때 실제 데이터베이스 인코딩으로 변환됩니다..

주의

일반적으로 데이터베이스 세션은 세션 내에서 처음 사용되는 경우 토토 베이 구성 파일을 한 번만 읽습니다. 구성 파일을 수정하고 기존 세션이 새로운 내용을 선택하도록 강요하려면 AN을 발행하십시오텍스트 검색 토토 베이 변경토토 베이의 명령. 이것은 A 일 수 있습니다."더미"실제로 매개 변수 값을 변경하지 않는 업데이트.

12.6.3. 동의어 토토 베이

이 사전 템플릿은 단어를 동의어로 대체하는 사전을 만드는 데 사용됩니다. 문구는 지원되지 않습니다 (Thesurus 템플릿 사용 (섹션 12.6.4). 동의어 사전은 예를 들어 영어 줄기 사전이 단어를 줄이는 것을 막기 위해 언어 문제를 극복하는 데 사용될 수 있습니다."파리"to"pari". 가 충분합니다.파리 파리동의어 토토 베이에서 줄을 세우고English_stem토토 베이. 예를 들어:

선택 *에서 ts_debug ( '영어', '파리');

동의어템플릿은동의어, 구성 파일의 기본 이름입니다 -my_synonyms위의 예에서. 파일의 이름은입니다.$ sharedir/tsearch_data/my_synonyms.syn(where$ sharedir의미postgresql설치의 공유 데이터 디렉토리). 파일 형식은 대체 할 단어 당 하나의 줄에 불과하며, 단어와 동의어와 함께 공백으로 분리됩니다.

the동의어템플릿은 선택적 매개 변수도 있습니다cassensitive, 기본값false. 언제cassensitiveisfalse, 동의어 파일의 단어는 입력 토큰과 마찬가지로 소문자로 접 힙니다. 그 때true, 단어와 토큰은 소문자로 접히지 않지만 비교됩니다.

별표 (*)는 구성 파일의 동의어 끝에 배치 할 수 있습니다. 이것은 동의어가 접두사임을 나타냅니다.to_tsvector ()그러나 그것이 사용될 때to_tsquery (), 결과는 접두사 매치 마커가있는 쿼리 항목입니다 (참조섹션 12.3.2). 예를 들어,이 항목이에 있다고 가정합니다.$ sharedir/tsearch_data/synonym_sample.syn:

Postgres pgsql

그러면 결과를 얻을 것입니다 :

mydb =# 텍스트 검색 토토 베이 생성 (template = synonyms = 'synonyfy_sample');

12.6.4. 시소러스 토토 베이

동의어 사전 사전 (때로는 약칭TZ)는 단어와 문구의 관계, 즉 더 넓은 용어 (에 대한 정보를 포함하는 단어 모음입니다.bt), 좁은 용어 (nt), 선호하는 용어, 선호되지 않은 약관, 관련 약관 등

기본적으로 동의어 사전 사전은 모든 선호되지 않은 모든 용어를 하나의 선호하는 용어로 대체하고 선택적으로 원래의 인덱싱 용어를 보존합니다..postgresql의 현재 시소러스 사전의 구현은 추가 된 동의어 사전의 확장입니다문구지원. 시소러스 사전에는 다음 형식의 구성 파일이 필요합니다.

# 이것은 주석입니다

콜론 (:) 기호는 문구와 교체 사이의 구분 기 역할을합니다.

Thesaurus 토토 베이은 a를 사용합니다.Subdictionary(사전 구성에 지정됨)는 문구 일치를 확인하기 전에 입력 텍스트를 정규화합니다. 하나의 하위 분할 만 선택할 수 있습니다.*) 인덱스 된 단어의 시작 부분에서 하위 소설을 적용하는 것을 건너 뛰지만 모든 샘플 단어필수하위 소설에 알려져 있습니다.

동의어 사전 사전은 입력과 일치하는 여러 문구가 있고 마지막 정의를 사용하여 넥타이가 끊어지면 가장 긴 일치를 선택합니다..

소매에 의해 인식되는 특정 정지 단어를 지정할 수 없습니다. 대신 사용?중지 단어가 나타날 수있는 위치를 표시합니다. 예를 들어,를 가정합니다.athe하위 소설에 따른 중지 단어 :

? 하나 ?

매치a 하나는하나 A 2; 둘 다 대체SWSW.

동의어 사전 사전에는 문구를 인식 할 수있는 능력이 있으므로 상태를 기억하고 구문 분석기와 상호 작용해야합니다. 동의어 사전 사전은 이러한 과제를 사용하여 다음 단어를 처리하거나 축적을 중지 해야하는지 확인합니다.asciiword토큰, 그런 다음 동의어 사전 정의와 같은One 7토큰 유형 이후로 작동하지 않습니다uint동의어 사전에 할당되지 않았습니다.

주의

thesuruses는 인덱싱 중에 사용되므로 시소러스 사전의 매개 변수의 변경요구Reindexing. 대부분의 다른 사전 유형의 경우 스톱워드 추가 또는 제거와 같은 작은 변경 사항이 다시 표시되지 않습니다.

12.6.4.1. 시소러스 구성

새로운 시소러스 토토 베이을 정의하려면 사용하십시오.THESAURUS템플릿. 예를 들어:

텍스트 검색 토토 베이 생성 Thesaurus_simple (

여기 :

  • Thesaurus_simple새로운 토토 베이의 이름입니다

  • Mythesaurus는 동의어 사전 구성 파일의 기본 이름입니다. (전체 이름이 될 것입니다$ sharedir/tsearch_data/mythesaurus.ths, 여기서$ sharedir설치 공유 데이터 디렉토리를 의미합니다.)

  • pg_catalog.english_stem는 동의어 사전 정규화에 사용하기위한 (여기, 눈덩이 영어 스티머)입니다. 하위 소설에는 자체 구성 (예 : 중지 단어)이 있으며 여기에는 표시되지 않습니다.

이제 동의어 사전에 묶을 수 있습니다Thesaurus_simple구성에서 원하는 토큰 유형으로.

변경 텍스트 검색 구성 러시아어

12.6.4.2. 시소러스 예

간단한 천문 동의어 사전을 고려Thesaurus_astro, 여기에는 천문학적 단어 조합이 포함되어 있습니다 :

Supernovae Stars : Sn

아래에서 우리는 사전을 만들고 일부 토큰 유형을 천문학적 시소러스와 영어 stemmer에 바인딩합니다 :

텍스트 검색 사전 생성 Thesaurus_astro (

이제 우리는 그것이 어떻게 작동하는지 알 수 있습니다.ts_lexize는 입력을 단일 토큰으로 취급하기 때문에 시소러스 테스트에 그다지 유용하지 않습니다. 대신 우리는 사용할 수 있습니다Plainto_tsqueryto_tsvector입력 문자열을 여러 토큰으로 분해합니다 :

Plainto_tsquery ( 'Supernova Star')를 선택하십시오.

원칙적으로 사용할 수 있습니다to_tsquery당신이 인용한다면 :

select to_tsquery ( '' 'Supernova Star' '');

Supernova Star매치Supernovae StarsinThesaurus_astro우리는를 지정했기 때문에English_stem동의어 사전 정의에있는 Stemmer. stemmer가를 제거했습니다.es.

원래 문구와 대체물을 색인하려면 정의의 오른쪽 부분에 포함하십시오.

초신성 스타 : SN 초신성 스타

12.6.5. IspellDictionary

theIspell사전 템플릿 지원형태 학적 토토 베이,이 단어의 여러 언어 형태를 동일한 lexeme로 정상화 할 수 있습니다. 예를 들어, 영어Ispell토토 베이은 검색어의 모든 감소와 공액과 일치 할 수 있습니다은행, 예 :뱅킹, 은행, 은행, Banks 'Bank 's.

표준postgresql분포는 포함되지 않습니다Ispell구성 파일. 많은 언어에 대한 토토 베이은에서 구할 수 있습니다.Ispell. 또한 더 현대적인 사전 파일 형식이 지원됩니다 -MySpell(oo <2.0.1) 및Hunspell(oo> = 2.0.2). 토토 베이 목록은에서 사용할 수 있습니다.OpenOffice Wiki.

생성Ispell토토 베이, 내장 사용Ispell템플릿 및 여러 매개 변수를 지정합니다.

텍스트 검색 사전 생성 English_ispell (

여기,dictfile, AfffileStopwords토토 베이, 부착 및 스톱 단어 파일의 기본 이름을 지정하십시오. STOP-WORDS 파일은 위에서 설명한 동일한 형식을 가지고 있습니다.단순토토 베이 유형. 다른 파일의 형식은 여기에 지정되지 않았지만 위에서 언급 한 웹 사이트에서 사용할 수 있습니다.

Ispell 사전은 일반적으로 제한된 단어 세트를 인식하므로 다른 더 넓은 사전이 뒤 따릅니다. 예를 들어, 모든 것을 인식하는 눈덩이 사전.

Ispell 사전은 화합물 단어 분할 지원; 유용한 기능.복합 단어 제어화합물 형성에 참여할 수있는 토토 베이 단어를 표시하는 진술 :

복합 단어 제어 Z

노르웨이어 언어에 대한 몇 가지 예는 다음과 같습니다.

ts_lexize ( 'Norwegian_ispell', 'overbuljongterningpakkmesterissistent');

참고 : MySpell복합 단어를 지원하지 않습니다.Hunspell복합 단어에 대한 정교한 지원이 있습니다. 현재,postgresqlHunspell의 기본 복합 단어 작업 만 구현합니다.

12.6.6. SnowballDictionary

theSnowballDictionary Template는 영어에 대한 인기있는 Porter의 Stemming 알고리즘의 발명가 인 Martin Porter의 프로젝트를 기반으로합니다. Snowball은 이제 많은 언어에 대한 줄기 알고리즘을 제공합니다 ( 참조스노우 볼 사이트자세한 내용은). 각 알고리즘은 공통 변형 형태의 단어를 언어 내에서 철자로 줄이는 방법을 이해합니다.언어매개 변수를 사용할 수있는 stemmer를 식별하고 선택적으로 a를 지정할 수 있습니다Stopword제거 할 단어 목록을 제공하는 파일 이름. (postgresql의 표준 스톱워드 목록도 Snowball Project에서 제공합니다.) 예를 들어,에 해당하는 내장 정의가 있습니다.

텍스트 검색 사전 생성 English_stem (

Stopword 파일 형식은 이미 설명한 것과 동일합니다.

A Snowball사전은 단어를 단순화 할 수 있는지 여부에 관계없이 모든 것을 인식하므로 사전 목록의 끝에 배치해야합니다. 토큰이 다음 사전으로 전달하지 않기 때문에 다른 사전보다 먼저 그것을 갖는 것은 쓸모가 없습니다..