Postgresql 9.2.24 문서 | ||||
---|---|---|---|---|
PostgreSQL : 문서 : 9.2 : 스포츠 토토 베트맨 | up | 12 장. 전체 텍스트 검색 | PostgreSQL : 문서 : 9.2 : 사설 토토 예 |
토토 결과은 말이 안되는 단어를 제거하는 데 사용됩니다. 검색에서 고려 (단어 중지) 및 에게정상화다른 단어 같은 단어의 파생 된 형태가 일치합니다. 성공적으로 정규화 된 단어는 a라고합니다.lexeme. 검색 품질 향상, 정규화 및 제거 외에도 단어 중지 단어의 크기가 줄어 듭니다TSVECTOR문서 표현으로 성능이 향상됩니다. 정규화는 항상 언어 적 의미를 갖지는 않습니다 응용 프로그램 의미에 따라 다릅니다.
정규화의 일부 예 :
언어 - Ispell 토토 결과은 입력 단어를 줄이려고합니다 정규화 된 형태로; Stemmer 토토 결과은 단어를 제거합니다 결말
url위치가 될 수 있습니다 동등한 URL을 일치시키기 위해 정식화 :
http : //www.pgsql.ru/db/mw/index.html
http : //www.pgsql.ru/db/mw/
http : //www.pgsql.ru/db/../db/mw/index.html
색상 이름을 16 진수 값으로 대체 할 수 있습니다. 예 :빨간색, 녹색, 파란색, 마젠타 - FF0000, 00FF00, 0000FF, FF00FF
인덱싱 숫자 인 경우 일부 분수 숫자를 제거 할 수 있습니다 가능한 숫자의 범위를 줄이려면3.14159265359, 3.1415926, 3.14정규화 후 동일 소수점.
토토 결과은 토큰을 입력으로 받아들이는 프로그램입니다. 보고:
입력 토큰이 사전 (하나의 토큰이 하나 이상 lexeme)
단일 Lexeme과TSL_FILTER플래그 세트, 원본을 교체합니다 새로운 토큰이있는 토큰이 후속으로 전달됩니다. 토토 결과 (이것을하는 토토 결과을 a라고합니다.필터링 토토 결과)
토토 결과이 토큰을 알고 있다면 빈 배열이지만 중지 단어
NULL토토 결과이없는 경우 입력 토큰 인식
PostgreSQL제공 많은 언어에 대한 토토 결과 정의 된 토토 결과. 또한 있습니다 새로운 생성에 사용될 수있는 몇 가지 토토 결과 정의 된 템플릿 사용자 정의 매개 변수가있는 토토 결과. 토토 결과 정의 된 각 토토 결과 템플릿은 아래에 설명되어 있습니다. 기존 템플릿이 적합하지 않은 경우 새로운 것을 만들 수 있습니다. 참조Contrib/PostgreSQL예제 배포.
텍스트 검색 구성은 세트와 함께 파서를 바인딩합니다. 파서의 출력 토큰을 처리하기위한 토토 결과. 각각에 대해 파서가 반환 할 수있는 토큰 유형, 별도의 목록 토토 결과은 구성에 의해 지정됩니다. 토큰의 경우 이 유형은 파서에 의해 발견되며 목록의 각 토토 결과은 다음과 같습니다. 일부 토토 결과은 그것을 알려진 것으로 인식 할 때까지 상담 단어. 중지 단어로 식별되거나 토토 결과이없는 경우 토큰을 인식하면 폐기되고 색인화되지 않거나 검색했습니다. 일반적으로, 반환하는 첫 번째 토토 결과 비NULL출력 결과를 결정합니다. 그리고 나머지 토토 결과은 상담되지 않습니다. 그러나 필터링 토토 결과은 주어진 단어를 수정 된 단어로 대체 할 수 있습니다. 그런 다음 후속 토토 결과으로 전달됩니다.
토토 결과 목록을 구성하는 일반적인 규칙은 다음과 같습니다. 가장 좁고 가장 구체적인 토토 결과을 먼저 배치 한 다음 더 일반적인 토토 결과, 매우 일반적인 토토 결과 토토 결과, 같은SnowballStemmer 또는단순모든 것. 예를 들어, 천문학 별 검색의 경우 (Astro_en구성) 바인딩 할 수 있습니다 토큰 유형asciiword(ascii Word) to a 천문학적 용어의 동의어 토토 결과, 일반 영어 토토 결과 및 ASnowballEnglish Stemmer :
Alter Text 검색 구성 Astro_en Astrosyn, English_ispell, English_stem;로 Asciiword에 대한 매핑 추가
필터링 토토 결과은 목록의 어느 곳에도 배치 할 수 있습니다. 끝을 제외하고는 쓸모가 없습니다. 필터링 토토 결과 단어를 단순화하기 위해 단어를 부분적으로 정규화하는 데 유용합니다. 나중에 사전. 예를 들어, 필터링 토토 결과이 될 수 있습니다 악센트가있는 문자에서 악센트를 제거하는 데 사용됩니다.Unaccent모듈.
단어 중지 단어는 매우 흔한 단어입니다. 모든 문서, 차별 가치가 없습니다. 그러므로, 전체 텍스트 검색의 맥락에서 무시할 수 있습니다. 을 위한 예를 들어 모든 영어 텍스트에는와 같은 단어가 포함됩니다.aandthe색인에 저장하는 것은 쓸모가 없습니다. 그러나 중지 단어는 그렇습니다 의 위치에 영향을 미칩니다.tsvector순위에 영향을 미칩니다 :
select to_tsvector ( '영어', '중지 단어 목록에서'); to_tsvector ---------------------------- '목록': 3 '정지': 5 '단어': 6
누락 된 위치 1,2,4는 중지 단어 때문입니다. 순위 중지 단어 유무에 관계없이 문서에 대해 계산됩니다. 다른:
select ts_rank_cd (to_tsvector ( '영어', '중지 단어 목록에서'), to_tsquery ( 'list & stop')); TS_RANK_CD ------------ 0.05 ts_rank_cd (to_tsvector ( '영어', '목록 중지 단어'), to_tsquery ( 'list & stop')); TS_RANK_CD ------------ 0.1
그것은 특정 토토 결과에 달려 있습니다. 단어. 예를 들어,Ispell사전은 먼저 단어를 정상화 한 다음의 목록을보십시오. 단어를 중지하십시오Snowballstemmers 먼저 중지 단어 목록을 확인하십시오. 그 이유 다른 행동은 소음을 줄이려는 시도입니다.
the단순토토 결과 템플릿 입력 토큰을 소문자로 변환하여 작동하고 중지 단어 파일에 대해 확인하십시오. 그것이 발견되면 파일 그런 다음 빈 배열이 반환되어 토큰이 폐기. 그렇지 않다면, 하위 사례 형태의 단어가 반환됩니다. 정규화 된 Lexeme으로. 또는 토토 결과은 될 수 있습니다 비 층 단어를 인식 할 수없는 것으로보고하도록 구성되었습니다 목록의 다음 토토 결과으로 전달됩니다.
다음은를 사용한 토토 결과 정의의 예입니다.단순템플릿 :
텍스트 검색 토토 결과 생성 public.simple_dict ( 템플릿 = pg_catalog.simple, stopwords = 영어 );
여기,영어a의 기본 이름입니다 중지 단어의 파일. 파일의 이름은입니다.$ sharedir/tsearch_data/el, 여기서$ sharedir의미PostgreSQL설치의 공유 데이터 디렉토리, 종종/usr/local/share/postgresql(사용PG_CONFIG -SHAREDIR당신이 그것을 결정하려면 확실하지 않음). 파일 형식은 단순히 단어 목록입니다. 선. 빈 선과 후행 공간은 무시되고 상단이 무시됩니다 케이스는 소문자로 접 히지 만 다른 처리는 수행되지 않습니다. 파일 내용에.
이제 우리는 토토 결과을 테스트 할 수 있습니다 :
ts_lexize를 선택합니다 ( 'public.simple_dict', 'yes'); ts_lexize ---------- 예 select ts_lexize ( 'public.simple_dict', 'the'); ts_lexize ----------
우리는 또한 반환을 선택할 수 있습니다NULL, 중지에서 찾을 수없는 경우 하위 표지 단어 대신 단어 파일. 이 동작은 설정하여 선택됩니다 토토 결과수락매개 변수 to거짓. 예제 계속 :
텍스트 검색 사전 Alter Alter Alter.simple_dict (accept = false); ts_lexize ( 'public.simple_dict', 'yes')를 선택하십시오. ts_lexize ---------- select ts_lexize ( 'public.simple_dict', 'the'); ts_lexize ----------
기본 설정이있는수락=True, a 배치하는 것이 유용합니다.단순목록 끝의 토토 결과 토토 결과의 토토 결과 다음. 거꾸로,수락=거짓전용입니다 토토 결과 다음에 하나 이상이있을 때 유용합니다.
주의 |
대부분의 유형의 토토 결과은 구성에 의존합니다 중지 단어의 파일과 같은 파일. 이 파일필수be UTF-8 인코딩에 저장됩니다. 그들은 번역 될 것입니다 실제 데이터베이스 인코딩은 다른 경우 그들이 서버로 읽을 때. |
주의 |
일반적으로 데이터베이스 세션은 토토 결과을 읽습니다 구성 파일이 처음 사용 된 경우 한 번만 구성됩니다 세션 내에서. 구성 파일을 수정 한 경우 기존 세션이 새로운 것을 집어 들기를 원합니다. 내용, 발행텍스트 변경 검색 토토 결과토토 결과의 명령. 이것 할 수 있습니다"더미"업데이트 실제로 매개 변수 값을 변경하지 않습니다. |
이 사전 템플릿은 사전을 만드는 데 사용됩니다 단어를 동의어로 바꾸십시오. 문구는 지원되지 않습니다 (사용 시소러스 템플릿 (섹션 12.6.4). 동의어 사전은 익숙해 질 수 있습니다 예를 들어, 언어 문제를 극복하기 위해 언어 문제를 극복하십시오 영어 스티머 사전이 단어를 줄이는 것에서"파리"to"pari". 그것 가 충분합니다.파리 파리라인 동의어 토토 결과에서 앞에 놓아English_stem토토 결과. 예를 들어:
선택 *에서 ts_debug ( '영어', '파리'); 별칭 | 설명 | 토큰 | 사전 | 사전 | Lexemes ------------+---------------------------------------------------------------------------- asciiword | 단어, 모든 ascii | 파리 | English_Stem | English_stem | pari 텍스트 검색 사전 생성 my_synonym ( 템플릿 = 동의어, 동의어 = my_synonyms ); 텍스트 검색 구성 영어를 변경합니다 asciiword에 대한 변경 매핑 my_synonym, 영어 _stem; 선택 *에서 ts_debug ( '영어', '파리'); 별칭 | 설명 | 토큰 | 사전 | 사전 | Lexemes -----------+---------------------------------------------------------------------------------------- asciiword | 단어, 모든 ascii | 파리 | my_synonym, 영어 _stem | my_synonymy | 파리
동의어템플릿은동의어, 이는 그 기본 이름입니다 구성 파일 -my_synonymsin 위의 예. 파일의 이름은입니다.$ sharedir/tsearch_data/my_synonyms.syn(where$ sharedir의미PostgreSQL설치의 공유 데이터 예배 규칙서). 파일 형식은 단어 당 하나의 줄입니다. 그 단어와 동의어가 뒤 따르는 단어와 함께 대체되었습니다 공백으로. 빈 선과 후행 공간이 있습니다 무시.
the동의어템플릿도 있습니다 선택적 매개 변수cassensitive, 기본값거짓. 언제cassensitiveis거짓, 동의어 파일의 단어가 접 힙니다 입력 토큰과 마찬가지로 소문자. 그 때true, 단어와 토큰은 더 낮게 접히지 않습니다 사례이지만 비교됩니다.
별표 (*)를 배치 할 수 있습니다
구성 파일의 동의어 끝. 이것은 나타납니다
동의어는 접두사라는 것입니다. 별표는 다음에 무시됩니다
입력은에서 사용됩니다.to_tsvector ()
,
하지만to_tsquery ()
, 결과는 쿼리 항목이됩니다
접두사 매치 마커 (참조섹션
12.3.2). 예를 들어,이 항목이에 있다고 가정합니다.$ sharedir/tsearch_data/synonym_sample.syn:
Postgres pgsql postgresql pgsql postgre pgsql Gogle Googl 지수 인덱스*
그러면 우리는 다음 결과를 얻을 것입니다 :
mydb =# 생성 텍스트 검색 토토 결과 syn (template = synonyms = 'synonyfy_sample'); mydb =# select ts_lexize ( 'syn', 'indices'); ts_lexize ---------- 색인
ATSAURUS 토토 결과 (때로는 약식TZ)는 단어 모음입니다 여기에는 단어의 관계에 대한 정보가 포함됩니다 문구, 즉 더 넓은 용어 (bt), 좁은 용어 (nt), 선호하는 용어, 선호되지 않은 약관, 관련 용어 등
기본적으로 동의어 사전 사전은 모든 선호되지 않은 모든 것을 대체합니다 용어를 하나의 선호하는 용어로, 선택적으로 보존합니다 인덱싱을위한 원래 용어도 있습니다.postgresql의 현재 구현 동의어 사전 사전은 동의어 사전의 연장입니다 추가Phrase지원. 시소러스 토토 결과에는 다음의 구성 파일이 필요합니다 체재:
# 이것은 주석입니다 샘플 단어 : 색인 단어 (들) 더 많은 샘플 단어 : 더 많은 색인이있는 단어 (들) ...
콜론 (:) 기호는 문구와 교체 사이의 구분 기호.
ATSAURUS 토토 결과은 A를 사용합니다.subdictionary(이에 지정되어 있습니다 사전 구성) 이전 입력 텍스트를 정상화하려면 문구 일치 확인. 하나만 선택할 수 있습니다 하위 소설. 하위 소설이 실패하면 오류 가보고됩니다 단어를 인식합니다. 이 경우 사용을 제거해야합니다 그 단어 또는 그에 대한 하위를 가르치십시오. 당신은 배치 할 수 있습니다 별표 (*) an의 시작시 인덱스 된 단어는 그에 대한 소위 적용을 건너 뛰는 것을 건너 뛰지만 샘플 단어필수be 하위 소설에 알려져 있습니다.
시소러스 토토 결과은 가장 긴 경기를 선택합니다 입력과 일치하는 여러 문구이며, 넥타이는 마지막 정의 사용.
하위 소설에 의해 인식되는 특정 정지 단어는 할 수 없습니다 지정됩니다. 대신 사용?마크 중지 단어가 나타날 수있는 위치. 예를 들어, 그것을 가정aandthe에 따라 중지 단어입니다 부하 :
? 하나 ? 둘 : SWSW
매치A 중 하나and하나 A 2; 둘 다 교체 될 것입니다 에 의해SWSW.
동의어 사전에는 인식 할 능력이 있기 때문에 문구 상태를 기억하고 파서. 동의어 사전 사전은 이러한 과제를 사용하여 확인합니다 다음 단어를 처리하거나 축적을 중지 해야하는 경우. 그만큼 시소러스 사전은 신중하게 구성되어야합니다. 예를 들어, 시소러스 사전이 만 처리하도록 할당 된 경우asciiword토큰, 그런 다음 시소러스 와 같은 토토 결과 정의1 7의지 토큰 유형 이후로 작동하지 않음uint그렇지 않습니다 시소러스 토토 결과에 할당.
주의 |
thesuruses는 인덱싱 중에 사용되므로 변경합니다 시소러스 사전의 매개 변수에서요구Reindexing. 을 위한 대부분의 다른 토토 결과 유형, 다음과 같은 작은 변화 스톱워드를 추가하거나 제거해도 강제가되지 않습니다 reindexing. |
새로운 시소러스 토토 결과을 정의하려면 사용하십시오.THESAURUS템플릿. 예를 들어:
텍스트 검색 사전 생성 Thesaurus_simple ( 템플릿 = 시소러스, Dictfile = Mythesaurus, 사전 = pg_catalog.english_stem );
여기 :
THESAURUS_SIMPLE새로운 것입니다 토토 결과 이름
Mythesaurus기본 이름입니다 시소러스 구성 파일의. (전체 이름은 할 것입니다 BE$ sharedir/tsearch_data/mythesaurus.ths, 어디$ sharedir설치 공유 데이터 디렉토리.)
pg_catalog.english_stemIS 하위 소설 (여기, 눈덩이 영어 스티머) 시소러스 정규화에 사용하십시오. 그것을 주목하십시오 하위 소설은 자체 구성이 있습니다 (for 예를 들어, 단어 중지), 여기에는 표시되지 않습니다.
이제 동의어 사전 사전에 묶을 수 있습니다THESAURUS_SIMPLE원하는대로 구성에서 토큰 유형은 예를 들어 :
변경 텍스트 검색 구성 러시아어 asciiword, asciihword, hword_asciipart에 대한 Alter 매핑 Thesaurus_simple과 함께;
간단한 천문 동의어 사전을 고려Thesaurus_astro, 여기에는 일부를 포함합니다 천문 단어 조합 :
Supernovae Stars : Sn 게 성운 : 게
아래에서 우리는 사전을 만들고 일부 토큰 유형을 천문학적 시소러스와 영어 스티머 :
텍스트 검색 사전 생성 Thesaurus_astro ( 템플릿 = 시소러스, dictfile = thesaurus_astro, 사전 = 영어 _stem ); 텍스트 검색 구성 러시아어 변경 asciiword, asciihword, hword_asciipart에 대한 Alter 매핑 Thesaurus_astro와 함께, English_stem;
이제 우리는 그것이 어떻게 작동하는지 알 수 있습니다.ts_lexize
테스트에 그다지 유용하지 않습니다
시소러스는 입력을 단일 토큰으로 취급하기 때문입니다.
대신 우리는 사용할 수 있습니다plainto_tsquery
andto_tsvector
입력을 분해합니다
여러 토큰으로의 문자열 :
Plainto_tsquery ( 'Supernova Star')를 선택하십시오. Plainto_tsquery ------------------ 'sn' 선택 to_tsvector ( 'Supernova Star'); to_tsvector ------------- 'sn': 1
원칙적으로 사용할 수 있습니다TO_TSQUERY
32506_32535
select to_tsquery ( '' 'Supernova Star' ''); to_tsquery ------------ 'sn'
Supernova Star매치Supernovae StarsinThesaurus_astro우리가 지정했기 때문에 그만큼English_stem시소러스 정의. stemmer가를 제거했습니다.eandS.
원래 문구와 대체물을 색인하려면, 정의의 오른쪽 부분에 포함 시키십시오.
Supernovae Stars : Sn Supernovae Stars Plainto_tsquery ( 'Supernova Star')를 선택하십시오. Plainto_tsquery --------------------------------- 'sn'& 'supernova'& 'star'
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 ( 템플릿 = ispell, dictfile = 영어, afffile = 영어, stopwords = 영어 );
여기,Dictfile, Afffile및Stopwords토토 결과의 기본 이름, 부착 및 스톱 워드 파일. STOP-WORDS 파일은 동일한 형식을 가지고 있습니다 위에서 설명 함단순토토 결과 유형. 다른 파일의 형식은 지정되지 않았습니다 여기서는 위에서 언급 한 웹 사이트에서 제공됩니다.
ispell 사전은 일반적으로 제한된 세트를 인식합니다 말, 그래서 그들은 또 다른 더 넓은 뒤를이어야합니다 사전; 예를 들어, 눈덩이 사전 모든 것을 인식합니다.
Ispell 사전은 화합물 단어 분할 지원; 에이 유용한 기능. 부착 파일은 a를 지정해야합니다 를 사용한 특별 깃발복합음 통제할 수있는 토토 결과 단어를 표시하는 진술 복합 형성에 참여 :
복합 단어 제어 z
노르웨이 언어에 대한 몇 가지 예는 다음과 같습니다.
ts_lexize ( 'Norwegian_ispell', 'OverBuljongterningPakkMesterissistent'); Over, Buljong, Terning, Pakk, Mester, Assistent
참고 : MySpell복합 단어를 지원하지 않습니다.Hunspell정교한 지원이 있습니다 복합 단어. 현재,PostgreSQL기본 만 구현합니다 Hunspell의 복합 단어 작업.
theSnowball사전 템플릿은 Martin Porter의 프로젝트를 기반으로합니다. 영어에 대한 인기있는 포터의 줄기 알고리즘 언어. Snowball은 이제 많은 사람들에게 줄기 알고리즘을 제공합니다 언어 ( 참조스노우 볼 사이트자세한 내용은). 각 알고리즘 공통 변형 형식의 단어를 기본 또는 줄기, 언어 내의 철자. 눈덩이 토토 결과이 필요합니다언어매개 변수를 사용할 수있는 스템머를 식별하고 선택적으로 A 지정Stopword파일 이름 제거 할 단어 목록을 제공합니다. (PostgreSQL의 표준 스톱워드 목록입니다 예를 들어 Snowball Project에서 제공합니다.) 예를 들어, 내장 정의와 동등한
텍스트 검색 사전 생성 English_stem ( 템플릿 = 눈덩이, 언어 = 영어, stopwords = 영어 );
Stopword 파일 형식은 이미와 동일합니다 설명.
aSnowball사전 단순화 할 수 있는지 여부에 관계없이 모든 것을 인식합니다. 단어, 사전 끝에 배치해야합니다. 목록. 다른 사전 전에 그것을 갖는 것은 쓸모가 없습니다. 토큰이 다음을 통과하지 않기 때문에 사전.