이 문서는 지원되지 않는 버전의 스포츠 토토 베트맨을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다스포츠 토토 베트맨 : 문서 : 17 : 12.4. 추가 롤 토토버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

12.4. 추가 기능

이 섹션에서는 추가 기능과 연산자를 설명합니다 텍스트 검색과 관련하여 유용합니다.

12.4.1. 조작 서류

섹션 12.3.1원시 텍스트 스포츠 토토 베트맨가 어떻게 변환 될 수 있는지 보여주었습니다TSVECTOR값.스포츠 토토 베트맨또한 함수를 제공합니다 이미있는 스포츠 토토 베트맨를 조작하는 데 사용할 수있는 연산자 안에TSVECTORform.

tsvector || tsvector

thetsvector연결 연산자 Lexemes와 위치를 결합한 벡터를 반환합니다 인수로 주어진 두 벡터의 정보. 위치와 중량 라벨은 연결 중에 유지됩니다. 위치 오른쪽 벡터에 나타나는 것은 가장 큰 왼쪽 벡터에 언급 된 위치, 결과는 수행 결과와 거의 동일합니다to_tsvector둘의 연결에 오리지널 스포츠 토토 베트맨 문자열. (동등성은 정확하지 않습니다 왼쪽 인수의 끝에서 제거 된 모든 중지 단어는 결과에 영향을 미치지 않는 반면 텍스트 인 경우 오른쪽 논증에서 렉시스의 위치 연결이 사용되었습니다.)

벡터 형태에서 연결을 사용하는 한 가지 이점, 오히려 오히려 적용하기 전에 텍스트를 연결하는 것보다to_tsvector, 다른 것을 사용할 수 있다는 것입니다 스포츠 토토 베트맨의 다른 섹션을 구문 분석하기위한 구성. 또한, 때문에setweight함수 마크 주어진 벡터의 모든 lexemes는 같은 방식으로 필요합니다. 텍스트를 구문 분석하고setweight당신이 다른 부분의 다른 부분에 레이블을 붙이려면 연결하기 전에 가중치가 다른 스포츠 토토 베트맨.

setweight (Vector TSVECTOR, weight "char") 반환tsvector

setweight사본을 반환합니다 모든 위치가 라벨이 붙은 입력 벡터 주어진웨이트, 어느a, B, C또는d. (d새 벡터의 기본값이므로 출력에 표시됩니다.)이 레이블은 벡터가있을 때 유지됩니다. 스포츠 토토 베트맨의 다른 부분의 단어를 순위를 높이면 다르게 가중치를 부여하십시오.

무게 라벨이 적용됨위치, 아님lexemes. 입력 벡터가있는 경우 그런 다음 위치의 제거setweight아무것도하지 않습니다.

12656_12665Vector TSVECTOR) 보고정수

벡터에 저장된 Lexemes의 수를 반환합니다.

Strip (Vector TSVECTOR) 보고TSVECTOR

주어진 것과 동일한 lexemes를 나열하는 벡터를 반환합니다. 벡터이지만 위치 또는 중량 정보가 부족합니다. 하는 동안 반환 된 벡터는 스트리핑되지 않은 벡터보다 훨씬 덜 유용합니다. 관련성 순위의 경우 일반적으로 훨씬 작습니다.

12.4.2. 조작 쿼리

섹션 12.3.2원시 텍스트 쿼리를 어떻게 변환 할 수 있는지 보여주었습니다tsquery값.스포츠 토토 베트맨또한 함수를 제공합니다 이미 쿼리를 조작하는 데 사용할 수있는 연산자 안에tsquery양식.

TSQUERY && TSQUERY

주어진 두 쿼리의 반환 및 공액을 반환합니다.

TSQUERY || TSQUERY

주어진 쿼리의 또는 전달을 반환합니다.

!!tsquery

주어진 쿼리의 부정을 반환합니다.

Numnode (쿼리 tsquery) 반환정수

A에서 노드 수 (Lexemes + 연산자)의 수를 반환합니다TSQUERY. 이 기능은 결정하는 데 유용합니다 인 경우쿼리의미가 있습니다 (반품 0) 또는 중지 단어 만 포함합니다 (반환 0). 예 :

Numnode (Plainto_tsquery ( 'The Any'))를 선택합니다.
통지 : 쿼리에는 stopword 만 포함되거나 Lexeme (들)이 포함되어 있지 않습니다.
 Numnode
-------
       0

numnode ( 'foo & bar':: tsquery)를 선택하십시오.
 Numnode
-------
       3
QueryTree (쿼리 tsquery) 반환텍스트

a의 부분을 반환합니다tsquery색인 검색에 사용됩니다. 이 기능은 유용합니다 예를 들어 포함되지 않은 쿼리를 감지합니다 단어를 중지하거나 부정적인 용어 만 부정하십시오. 예를 들어:

select QueryTree (to_tsquery ( '! defined'));
 Querytree
----------

12.4.2.1. 쿼리 재 작성

theTS_REWRITE기능 가족 주어진 검색tsquerya 하위 쿼리를 대상으로하고 각 발생을 대체물로 교체하십시오 하위 퀴어. 본질적 으로이 작업은입니다.tsquery-특이 적 버전의 기판 교체. 에이 대상 및 대체 조합은 A로 생각할 수 있습니다.쿼리 rewrite rule. 그러한 재 작성의 모음 규칙은 강력한 검색 원조가 될 수 있습니다. 예를 들어, 당신은 확장 할 수 있습니다 동의어를 사용하여 검색 (예 :뉴욕, Big Apple, NYC, 고담) 또는 검색을 좁히기 위해 핫 주제에 대한 사용자. 기능에는 약간의 겹침이 있습니다 이 기능과 시소러스 사전 사이 (섹션 12.6.4). 그러나 재 작성 규칙 세트를 수정할 수 있습니다 동의어 사전을 업데이트하는 반면, 다시 한 번의 날개없이 효과를 얻으려면 Reindexing이 필요합니다.

TS_REWRITE (쿼리 TSQUERY, 대상 tsquery, 대체 TSQUERY) 반환TSQUERY

이 형태의TS_REWRITE간단히 단일 재 작성 규칙을 적용합니다 :대상대체어디에서나쿼리. 예를 들어:

TS_REWRITE ( 'A & B':: TSQUERY, 'A':: TSQUERY, 'C':: TSQUERY);
 ts_rewrite
------------
 'b'& 'c'
TS_REWRITE (쿼리 tsquery, select 텍스트) 보고tsquery

이 형태의TS_REWRITE수락 a 시작쿼리및 SQLselect명령은 텍스트로 제공됩니다 끈. 그만큼select2를 산출해야합니다 열tsquery타입. 의 각 행에 대해select결과, 발생 첫 번째 열 값 (대상)이 두 번째 열로 대체됩니다. 값 (대체) 내에서쿼리값. 예를 들어:

테이블 별칭 생성 (t tsquery 기본 키, s tsquery);
별칭 값 ( 'a', 'c')에 삽입;

선택 ts_rewrite ( 'a & b':: tsquery, 'select t, s from aliases');
 ts_rewrite
------------
 'b'& 'c'

여러 재 작성 규칙이 이러한 방식으로 적용되는 경우, 신청 순서가 중요 할 수 있습니다. 실제로 당신은 할 것입니다 소스 쿼리를 원합니다주문 by일부 열쇠 순서.

실제 천문학적 사례를 고려해 봅시다. 우리는 확장 할 것입니다 질문Supernovae테이블 구동 사용 규칙 재 작성 :

테이블 별칭 생성 (t tsquery 기본 키, s tsquery);
별칭 값 (TO_TSQUERY ( 'supernovae'), to_tsquery ( 'supernovae | sn'))에 삽입;

선택 ts_rewrite (to_tsquery ( 'supernovae & crab'), 'select * from aliases');
           ts_rewrite            
--------------------------------------------
 '크랩'& ( 'supernova'| 'sn')

우리는 다시 작성하여 다시 쓰기 규칙을 변경할 수 있습니다. 테이블:

별칭 업데이트
set s = to_tsquery ( 'supernovae | sn &! nebulae')
여기서 t = to_tsquery ( 'supernovae');

선택 ts_rewrite (to_tsquery ( 'supernovae & crab'), 'select * from aliases');
                 ts_rewrite                  
----------------------------------------------------------
 '크랩'& ( 'supernova'| 'sn'&! 'nebula')

다시 쓰기 규칙이 있으면 재 작성이 느려질 수 있습니다. 가능한 일치에 대해 모든 규칙을 확인합니다. 명백한 필터링 비 후급 규칙 우리는 |tsquery타입. 아래 예에서는 선택합니다 원래 쿼리와 일치 할 수있는 규칙 만 있습니다.

선택 TS_REWRITE ( 'A & B':: TSQUERY,
                  ''a & b '':: tsquery @ t ') 여기서 aliases에서 t, s를 선택합니다);
 ts_rewrite
------------
 'b'& 'c'

12.4.3. 자동 트리거 업데이트

별도의 열을 사용하여 저장할 때TSVECTOR스포츠 토토 베트맨 표현은입니다 업데이트하려면 트리거를 작성하는 데 필요합니다TSVECTOR스포츠 토토 베트맨 컨텐츠 열면 열 변화. 이를 위해 두 가지 내장 트리거 기능이 제공됩니다 당신은 당신 자신의 글을 쓸 수 있습니다.

tsvector_update_trigger (TSVECTOR_COLUMN_NAME, config_name, text_column_name[, ... ]))
tsvector_update_trigger_column (TSVECTOR_COLUMN_NAME, config_column_name, text_column_name[, ... ])

이 트리거 함수는 자동으로 A를 계산합니다.tsvector하나 이상의 텍스트 열에서 열리는 열 에 지정된 매개 변수의 제어트리거 만들기명령. 그들의 사용의 예 이다:

테이블 메시지 작성 (
    제목 텍스트,
    신체 텍스트,
    TSV TSVECTOR
);

삽입 또는 업데이트 전에 트리거 tsvectorupdate를 만듭니다
각 행의 메시지에서 프로 시저를 실행합니다
tsvector_update_trigger (tsv, 'pg_catalog.english', 제목, 신체);

메시지 값 ( '제목 여기', '본문 텍스트가 여기에 있습니다')에 삽입;

메시지에서 *를 선택하십시오.
   제목 |         바디 |            TSV             
------------+-----------------------------------------------------------
 여기 제목 | 바디 텍스트가 여기 있습니다 | 'bodi': 4 '텍스트': 5 'titl': 1

tsv @@ to_tsquery ( 'title & body')가있는 메시지에서 제목을 선택합니다.
   제목 |         몸          
------------+--------------------------
 여기 제목 | 신체 텍스트가 여기 있습니다

이 방아쇠를 만들어 냈습니다.제목또는Body의지 자동으로 반영TSV, 응용 프로그램이 그것에 대해 걱정할 필요없이.

첫 번째 트리거 인수는의 이름이어야합니다.TSVECTOR열이 업데이트 될 열입니다. 두 번째 주장 수행하는 데 사용할 텍스트 검색 구성을 지정합니다. 변환. 을 위한tsvector_update_trigger, 구성 이름 단순히 두 번째 트리거 인수로 주어집니다. 그럴 것입니다 트리거 동작이 변경되지 않음search_path. 을 위한tsvector_update_trigger_column, 두 번째 트리거 인수는 다른 테이블 열의 이름입니다. 유형이어야합니다RegConfig. 이것은 허용합니다 구성 할 구성의 당 선택. 나머지 인수는 텍스트 열의 이름입니다 (유형텍스트, Varchar또는char). 이것들은 스포츠 토토 베트맨에 포함됩니다 주어진 순서. NULL 값이 건너 뜁니다 (그러나 다른 열은 있습니다 여전히 색인이 표시됩니다).

이 내장 트리거의 제한은 모두를 처리한다는 것입니다. 입력 열이 모두 나타납니다. 열을 다르게 처리합니다 예를 들어, 몸과 다르게 체중 제목을 사용자 정의 트리거를 작성하십시오. 다음은를 사용하는 예입니다.pl/pgsql트리거 언어로 :

함수 작성 메시지
시작하다
  new.tsv : =
     setweight (to_tsvector ( 'pg_catalog.english', Coalesce (new.title, ''), 'a') ||
     setweight (to_tsvector ( 'pg_catalog.english', Coalesce (new.body, ''), 'd');
  새로운 반환;
끝
$$ 언어 plpgsql;

삽입 또는 업데이트 전에 트리거 tsvectorupdate를 만듭니다
    각 행에 대한 메시지에서 프로 시저 execute emsages_trigger ();

구성을 지정하는 것이 중요하다는 것을 명심하십시오. 생성 할 때 명시 적으로 이름을 지정합니다tsvector값 내부의 내용이 영향을받지 않도록 내부 트리거 변경에 의해default_text_search_config. 이렇게하지 않으면 검색과 같은 문제가 발생할 수 있습니다. 덤프 및 다시로드 후 변경 결과.

12.4.4. 스포츠 토토 베트맨 수집 통계

함수TS_STAT구성을 확인하고 스톱 워드를 찾으십시오 후보자.

TS_STAT (sqlquery 텍스트, [ 웨이트 텍스트, ]
        밖으로Word 텍스트, outndoc Integer,
        밖으로Nentry 정수) 반환setof record

sqlquery는 텍스트 값입니다 단일을 반환 해야하는 SQL 쿼리가 포함되어 있습니다TSVECTOR열.TS_STAT쿼리를 실행하고 각 별개의 통계를 반환합니다 lexeme (Word)에 포함 된TSVECTOR데이터. 반환 된 열은입니다.

  • Word 텍스트- Lexeme의 값

  • ndoc Integer- 스포츠 토토 베트맨 수 (TSVECTORs) 단어가 발생했습니다.

  • Nentry Integer- 단어의 총 발생 수

if웨이트만 제공됩니다 그 무게 중 하나를 갖는 사건은 계산됩니다.

예를 들어 스포츠 토토 베트맨에서 가장 빈번한 10 개의 단어를 찾으려면 수집:

선택 *에서 TS_STAT ( 'APOD에서 벡터 선택')
Nentry Desc, Ndoc Desc, Word의 주문
제한 10;

동일하지만 무게로 단어 발생 만 계산a또는B:

선택 *에서 TS_STAT ( 'APOD에서 벡터 선택', 'AB')
Nentry Desc, Ndoc Desc, Word의 주문
제한 10;