12.8. 텍스트 검색 테스트 및 디버깅#

사용자 정의 텍스트 검색 구성의 동작은 쉽게 혼란스러워 질 수 있습니다. 이 섹션에 설명 된 기능은 텍스트 검색 개체를 테스트하는 데 유용합니다. 완전한 구성을 테스트하거나 구문 분석기 및 사전을 별도로 테스트 할 수 있습니다.

12.8.1. 구성 테스트#

함수TS_DEBUG텍스트 검색 구성을 쉽게 테스트 할 수 있습니다.

TS_DEBUG ([ config RegConfig, ]문서 텍스트,
         밖으로alias 텍스트,
         밖으로설명 텍스트,
         밖으로토큰 텍스트,
         밖으로사전 RegDictionary [],
         밖으로사전 Regdictionary,
         밖으로lexemes 텍스트 [])
         레코드를 반환

TS_DEBUG모든 토큰에 대한 정보 표시문서파서에 의해 생성되고 구성된 사전에 의해 처리 된대로. 에 지정된 구성을 사용합니다.config또는default_text_search_config해당 인수가 생략된다면.

TS_DEBUG구문 분석기에서 텍스트에서 식별 된 각 토큰에 대해 하나의 행을 반환합니다. 반환 된 열은입니다.

  • alias 텍스트- 토큰 유형의 짧은 이름

  • 설명 텍스트- 토큰 유형 설명

  • 토큰 텍스트- 토큰의 텍스트

  • 사전 RegDictionary []-이 토큰 유형의 구성에 의해 선택된 사전

  • Dictionary RegDictionary- 토큰을 인식 한 사전 또는NULL그렇지 않은 경우

  • Lexemes 텍스트 []- 토큰을 인식 한 사전에 의해 생성 된 Lexeme (들)NULL아무도하지 않았다면; 빈 배열 ()는 그것이 중지 단어로 인식되었음을 의미합니다.

다음은 간단한 예입니다.

선택 *에서 ts_debug에서 ( '영어', '뚱뚱한 고양이는 매트에 앉아 뚱뚱한 쥐를 먹었습니다.);
   별칭 |   설명 | 토큰 |  사전 |  사전 | Lexemes
------------+----------------------------------------------------------------------------
 asciiword | 단어, 모든 ascii | A | English_Stem | E토토 결과lish_stem | 
 blank | 공간 기호 |       |  |              |
 asciiword | 단어, 모든 ascii | 지방 | English_Stem | E토토 결과lish_stem | 지방
 blank | 공간 기호 |       |  |              |
 asciiword | 단어, 모든 ascii | 고양이 | English_Stem | E토토 결과lish_stem | 고양이
 blank | 공간 기호 |       |  |              |
 asciiword | 단어, 모든 ascii | SAT | English_Stem | E토토 결과lish_stem | 앉았다
 blank | 공간 기호 |       |  |              |
 asciiword | 단어, 모든 ascii | on | English_Stem | E토토 결과lish_stem | 
 blank | 공간 기호 |       |  |              |
 asciiword | 단어, 모든 ascii | A | English_Stem | E토토 결과lish_stem | 
 blank | 공간 기호 |       |  |              |
 asciiword | 단어, 모든 ascii | 매트 | English_Stem | E토토 결과lish_stem | 매트
 blank | 공간 기호 |       |  |              |
 blank | 공간 기호 | - |  |              |
 asciiword | 단어, 모든 ascii | 그것은 | English_Stem | E토토 결과lish_stem | 
 blank | 공간 기호 |       |  |              |
 asciiword | 단어, 모든 ascii | ate | English_Stem | E토토 결과lish_stem | 먹었다
 blank | 공간 기호 |       |  |              |
 asciiword | 단어, 모든 ascii | A | English_Stem | E토토 결과lish_stem | 
 blank | 공간 기호 |       |  |              |
 asciiword | 단어, 모든 ascii | 지방 | English_Stem | E토토 결과lish_stem | 지방
 blank | 공간 기호 |       |  |              |
 asciiword | 단어, 모든 ascii | 쥐 | English_Stem | E토토 결과lish_stem | 쥐

보다 광범위한 데모를 위해 먼저 A를 만듭니다.public.e토토 결과lish영어의 구성 및 ISPELL 사전 :

텍스트 검색 구성 configuration public.e토토 결과lish (copy = pg_catalog.english);

텍스트 검색 사전 생성 E토토 결과lish_ispell (
    템플릿 = ispell,
    dictfile = 영어,
    afffile = 영어,
    stopwords = 영어
);

Alter Text 검색 구성 public.e토토 결과lish
   E토토 결과lish_ispell, E토토 결과lish_stem;로 asciiword의 Alter Mapping Alter Mapping
select * from ts_debug ( 'public.e토토 결과lish', '가장 밝은 초신성');
   별칭 |   설명 |    토큰 |         사전 |   사전 |   Lexemes
--------------------------------------------------------------------------------------------------------------------------
 asciiword | 단어, 모든 ascii | | E토토 결과lish_ispell, English_Stem | E토토 결과lish_ispell | 
 blank | 공간 기호 |             |  |                |
 asciiword | 단어, 모든 ascii | 가장 밝은 | E토토 결과lish_ispell, English_Stem | E토토 결과lish_ispell | 밝은
 blank | 공간 기호 |             |  |                |
 asciiword | 단어, 모든 ascii | 초신성 | E토토 결과lish_ispell, English_Stem | E토토 결과lish_stem | supernova

이 예에서 단어Brightest파서에 의해ASCII Word(별명asciiword). 이 토큰 유형의 경우 사전 목록은입니다.E토토 결과lish_ispellandE토토 결과lish_stem. 단어는에 의해 인정되었습니다.E토토 결과lish_ispell,이를 명사로 줄였습니다Bright. 단어SupernovaesE토토 결과lish_ispell사전은 다음 사전으로 전달되었고 다행히도 인정되었습니다 (실제로E토토 결과lish_stem모든 것을 인식하는 눈덩이 사전입니다. 그것이 사전 목록의 끝에 배치 된 이유입니다.)

단어theE토토 결과lish_ispell정지 단어로서의 사전 (섹션 12.6.1) 색인화되지 않습니다. 구성은 그들에게 전혀 사전을 제공하지 않기 때문에 공간도 폐기됩니다.

보고 싶은 열을 명시 적으로 지정하여 출력 폭을 줄일 수 있습니다.

별명, 토큰, 사전, Lexemes를 선택하십시오
ts_debug ( 'public.e토토 결과lish', '가장 밝은 초신성');
   별칭 |    토큰 |   사전 |   Lexemes
-----------+-----------------------------------------
 asciiword | | E토토 결과lish_ispell | 
 blank |             |                |
 asciiword | 가장 밝은 | E토토 결과lish_ispell | 밝은
 blank |             |                |
 asciiword | 초신성 | E토토 결과lish_stem | supernova

12.8.2. 파서 테스트#

다음 함수는 텍스트 검색 파서의 직접 테스트를 허용합니다.

TS_PARSE (parser_name 텍스트, Document 텍스트,
         밖으로Tokid 정수, out토큰 텍스트) 반환기록 설정TS_PARSE (parser_oid OID, 문서 텍스트,
         밖으로TOKID 정수, out토큰 텍스트) 반환Setof Record

TS_PARSE주어진 주어진문서그리고 구문 분석에 의해 생성 된 각 토큰마다 일련의 레코드를 반환합니다. 각 레코드에는 A가 포함됩니다.TOKID지정된 토큰 유형 및 A 표시토큰토큰의 텍스트입니다. 예를 들어:

선택 *에서 ts_parse ( 'default', '123- 숫자');
 Tokid | 토큰
-------+--------
    22 | 123
    12 |
    12 | -
     1 | 에이
    12 |
     1 | 숫자
TS_TOKEN_TYPE (parser_name 텍스트, outTOKID 정수,
              밖으로alias 텍스트, out설명 텍스트) 반환Setof RecordTS_TOKEN_TYPE (parser_oid OID, outTOKID Integer,
              밖으로alias 텍스트, out설명 텍스트) 반환Setof Record

TS_TOKEN_TYPE지정된 파서가 인식 할 수있는 각 유형의 토큰을 설명하는 테이블을 반환합니다. 각 토큰 유형에 대해 테이블은 정수를 제공합니다TOKID파서가 해당 유형의 토큰에 레이블을 지정하는 데 사용하는alias구성 명령에서 토큰 유형의 이름을 지정하고 짧은설명. 예를 들어:

선택 *에서 ts_token_type ( 'default');
 Tokid |      별칭 |               설명
-------+---------------------------------------------------------------
     1 | asciiword | 단어, 모든 ascii
     2 | 단어 | 단어, 모든 편지
     3 | numword | 단어, 문자 및 숫자
     4 | 이메일 | 이메일 주소
     5 | url | URL
     6 | 호스트 | 주인
     7 | sfloat | 과학적 표기법
     8 | 버전 | 버전 번호
     9 | hword_numpart | 하이픈으로 된 단어 부분, 문자 및 숫자
    10 | hword_part | 하이픈으로 된 단어 부분, 모든 글자
    11 | hword_asciipart | 하이픈으로 된 단어 부품, 모든 ascii
    12 | blank | 공간 기호
    13 | 태그 | XML 태그
    14 | 프로토콜 | 프로토콜 헤드
    15 | numhword | 하이픈으로 된 단어, 글자 및 숫자
    16 | asciihword | 하이픈으로 된 단어, 모든 ascii
    17 | hword | 하이픈으로 된 단어, 모든 글자
    18 | url_path | URL 경로
    19 | 파일 | 파일 또는 경로 이름
    20 | 플로트 | 소수점 표기법
    21 | int | 서명 된 정수
    22 | uint | 서명되지 않은 정수
    23 | 엔티티 | XML 엔티티

12.8.3. 사전 테스트#

thets_lexize함수는 사전 테스트를 용이하게합니다.

ts_lexize (DICT RegDictionary, 토큰 텍스트) 반환텍스트 []

ts_lexize입력 한 경우 Lexemes 배열을 반환토큰토큰이 사전에 알려져있는 경우 사전 또는 빈 배열로 알려져 있지만 중지 단어, 또는입니다.NULL그것이 알려지지 않은 단어라면.

예 :

ts_lexize를 선택합니다 ( 'E토토 결과lish_stem', 'stars');
 ts_lexize
----------
 별

ts_lexize ( 'E토토 결과lish_stem', 'a')를 선택하십시오.
 ts_lexize
----------

Note

thets_lexize함수는 단일을 기대합니다토큰, 텍스트가 아닙니다. 다음은 혼란 스러울 수있는 경우입니다.

ts_lexize ( 'thesaurus_astro', 'supernovae stars')를 선택하십시오.
 ?열?
---------
 티

The Surus DictionaryThesaurus_astro문구를 알고 있습니다Supernovae Stars그러나ts_lexize입력 텍스트를 구문 분석하지 않고 단일 토큰으로 취급하므로 실패합니다. 사용Plainto_tsquery또는to_tsvector예를 들어, 시소러스 사전을 테스트하려면 :

Plainto_tsquery ( 'Supernovae Stars')를 선택하십시오.
 Plainto_tsquery
------------------
 'sn'

정정 제출

문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면