이 섹션은 텍스트 검색과 관련하여 유용한 추가 토토 베이 및 연산자를 설명합니다.
섹션 12.3.1원시 텍스트 문서가 어떻게 변환 될 수 있는지 보여주었습니다TSVECTOR
값.PostgreSQL| 이미있는 문서를 조작하는 데 사용할 수있는 함수 및 연산자도 제공합니다.TSVECTOR
양식.
TSVECTOR
|| TSVECTOR
theTSVECTOR
연결 연산자는 인수로 주어진 두 벡터의 Lexemes와 위치 정보를 결합한 벡터를 반환합니다. 위치 및 중량 라벨은 연결 중에 유지됩니다.to_tsvector
두 개의 원본 문화 문자열의 연결에. (왼쪽 인수의 끝에서 제거 된 중지 단어는 결과에 영향을 미치지 않지만 텍스트 상관 관계가 사용 된 경우 오른쪽 인수에서 Lexemes의 위치에 영향을 미쳤을 것입니다.).
적용하기 전에 텍스트를 연결하는 대신 벡터 형태의 연결을 사용하는 한 가지 장점to_tsvector
, 다른 구성을 사용하여 문서의 다른 섹션을 구문 분석 할 수 있습니다. 또한 때문에setweight
함수는 주어진 벡터의 모든 lexemes를 동일한 방식으로 표시합니다. 텍스트를 구문 분석하고 수행해야합니다setweight
문서의 다른 부분에 다른 가중치로 레이블을 지정하려는 경우 연결하기 전에.
setweight (vector
TSVECTOR
, weight
"char"
) 반환TSVECTOR
setweight
모든 위치가 주어진 상태로 표시된 입력 벡터의 사본을 반환합니다weight
, 어느A
, B
, C
또는D
. (D
는 새 벡터의 기본값이며 출력에 표시되지 않습니다.)이 레이블은 벡터가 연결되면 유지되므로 토토 베이 순위에 따라 문서의 다른 부분의 단어가 다르게 가중 될 수 있습니다..
무게 라벨이 적용됨위치, 아님lexemes. 입력 벡터가 위치를 제거한 경우setweight
아무것도하지 않습니다.
길이 (vector
TSVECTOR
) 반환정수
벡터에 저장된 Lexemes의 수를 반환합니다.
Strip (vector
TSVECTOR
) 반환TSVECTOR
주어진 벡터와 동일한 lexemes를 나열하는 벡터를 반환하지만 위치 또는 중량 정보가 부족합니다. 결과는 일반적으로 스트리핑되지 않은 벡터보다 훨씬 작지만 덜 유용합니다.<-->
(이하)tsquery
연산자는 렉소 발생 사이의 거리를 결정할 수 없기 때문에 스트리핑 입력과 일치하지 않습니다.
전체 목록TSVECTOR
-관련 함수는에서 사용할 수 있습니다표 9.42.
섹션 12.3.2원시 텍스트 토토 베이를 어떻게 변환 할 수 있는지 보여주었습니다tsquery
값.PostgreSQL이미있는 토토 베이를 조작하는 데 사용할 수있는 함수 및 연산자를 제공합니다tsquery
양식.
tsquery
&& tsquery
주어진 토토 베이의 두 가지를 반환합니다.
tsquery
|| tsquery
주어진 두 토토 베이의 또는 전달을 반환합니다.
!! tsquery
주어진 토토 베이의 부정을 반환합니다.
tsquery
<-->tsquery
즉시 주어진 첫 번째 토토 베이와 일치하는 토토 베이를 반환 한 다음 즉시 주어진 토토 베이와 일치하는 토토 베이를 반환합니다.<-->
(이하)tsquery
운영자. 예를 들어:
select to_tsquery ( 'fat') <-> to_tsquery ( 'cat | rat');
tsquery_phrase (Query1
tsquery
, Query2
tsquery
[,거리
정수
]) 반환tsquery
첫 번째 주어진 토토 베이와 일치하는 토토 베이를 반환 한 다음 정확히 토토 베이와 일치하는 토토 베이를 반환합니다.거리
lexemes, 사용<
N
tsquery
운영자. 예를 들어:
TSQUERY_PHRASE (TO_TSQUERY ( 'FAT'), TO_TSQUERY ( 'CAT'), 10);
Numnode (토토 베이
tsquery
) 반환정수
A에서 노드 수 (Lexemes + 연산자)의 수를 반환합니다tsquery
. 이 토토 베이은를 결정하는 데 유용합니다.토토 베이
는 의미가 있거나 (반환> 0) 또는 중지 단어 만 포함합니다 (반환 0). 예 :
Numnode (Plainto_tsquery ( 'The Any'))를 선택합니다.
QueryTree (토토 베이
tsquery
) 반환텍스트
a의 부분을 반환합니다tsquery
인덱스 검색에 사용할 수 있습니다. 이 기능은 무시 할 수없는 토토 베이, 예를 들어 중지 단어 만 포함하는 토토 베이를 감지하는 데 유용합니다.
QueryTree (TO_TSQUERY ( 'defined'));
theTS_REWRITE
토토 베이 가족 검색 주어진tsquery
대상 하위 토토 베이의 발생을 위해서는 각 발생을 대체 하위 토토 베이로 교체합니다. 본질적 으로이 작업은입니다.tsquery
-특이 적 버전의 서브 스트링 교체. 대상과 대체 조합은 A로 생각할 수 있습니다.토토 베이 rewrite RULE. 이러한 다시 쓰기 규칙의 모음은 강력한 검색 원조가 될 수 있습니다.New York
, 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 (토토 베이
tsquery
, select
텍스트
) 반환tsquery
이 형태의TS_REWRITE
시작을 허용토토 베이
및 SQLselect
명령은 텍스트 문자열로 제공됩니다. 그만큼select
두 열의 열을 산출해야합니다tsquery
타입. 의 각 행에 대해select
결과, 첫 번째 열 값 (대상)의 발생은 전류 내에서 두 번째 열 값 (대체)으로 대체됩니다.토토 베이
값. 예를 들어:
테이블 별칭 생성 (t tsquery 기본 키, s tsquery);
이러한 방식으로 여러 다시 쓰기 규칙이 적용될 때 응용 프로그램 순서가 중요 할 수 있습니다. 실제로 소스 토토 베이를 원할 것입니다.주문 by
일부 주문 키.
실제 천문학적 사례를 고려해 봅시다. 토토 베이를 확장 할 것입니다Supernovae
테이블 구동 재 작성 규칙 사용 :
테이블 별칭 생성 (t tsquery 1 차 키, s tsquery);
테이블을 업데이트하여 재 작성 규칙을 변경할 수 있습니다.
별칭 업데이트
가능한 모든 규칙을 확인할 수있는 일치 규칙을 확인하기 때문에 많은 재 작성 규칙이있을 때 다시 쓰기가 느려질 수 있습니다. 명백한 비 후급 규칙을 필터링하기 위해 우리는 |tsquery
타입. 아래 예에서는 원래 토토 베이와 일치 할 수있는 규칙 만 선택합니다.
TS_REWRITE ( 'A & B':: TSQUERY,
이 섹션에 설명 된 방법은 저장된 생성 된 열의 사용에 의해 쓸모 없게되었습니다.섹션 12.2.2.
별도의 열을 사용하여 저장할 때TSVECTOR
문서 표현,를 업데이트하려면 트리거를 만들어야합니다TSVECTOR
문서 내용 열이 변경 될 때 열. 이를 위해 두 개의 내장 트리거 토토 베이을 사용할 수 있거나 직접 쓸 수 있습니다.
tsvector_update_trigger (tsvector_column_name
,config_name
,text_column_name
[, ... ]))tsvector_column_name
,config_column_name
,text_column_name
[, ... ])
이 트리거 함수는 자동으로 ATSVECTOR
하나 이상의 텍스트 열에서 열에서트리거 만들기
명령. 그들의 사용의 예는 다음과 같습니다.
테이블 메시지 작성 (
이 방아쇠를 만들어 냈습니다.제목
또는Body
자동으로 반영됩니다TSV
, 응용 프로그램이 그것에 대해 걱정할 필요없이.
첫 번째 트리거 인수는의 이름이어야합니다.TSVECTOR
열이 업데이트 될 열입니다. 두 번째 인수는 변환을 수행하는 데 사용할 텍스트 검색 구성을 지정합니다.tsvector_update_trigger
, 구성 이름은 단순히 두 번째 트리거 인수로 제공됩니다. 위에서 볼 수 있듯이 스키마 자격을 갖추어야하므로 트리거 동작이 변경되지 않도록 변하지 않도록search_path
. 을 위한tsvector_update_trigger_column
, 두 번째 트리거 인수는 다른 테이블 열의 이름이며, 이는 유형이어야합니다RegConfig
. 이를 통해 양의 구성을 선택할 수 있습니다.텍스트
, Varchar
또는char
). 주어진 순서대로 문서에 포함됩니다.
이러한 내장 트리거의 제한은 모든 입력 열을 모두 처리한다는 것입니다. 열을 다르게 처리하려면 (예 : 신체와 다르게 무게 제목) 사용자 정의 트리거를 작성해야합니다.pl/pgsql트리거 언어로 :
함수 작성 메시지
생성 할 때 구성 이름을 명시 적으로 지정하는 것이 중요하다는 것을 명심하십시오TSVECTOR
트리거 내부의 값이므로 열 내용이 변경에 영향을받지 않도록default_text_search_config
. 이렇게하지 않으면 덤프 및 복원 후 검색 결과가 변경되는 것과 같은 문제가 발생할 수 있습니다.
함수TS_STAT
구성을 확인하고 스톱 단어 후보를 찾는 데 유용합니다.
TS_STAT (sqlquery
텍스트
, [웨이트
텍스트
, ]Word
텍스트
, outndoc
정수
,Nentry
정수
) 반환기록 설정
sqlquery
단일을 반환 해야하는 SQL 토토 베이가 포함 된 텍스트 값입니다.TSVECTOR
열.TS_STAT
토토 베이를 실행하고에 포함 된 각 고유 한 Lexeme (Word)에 대한 통계를 반환합니다TSVECTOR
데이터. 반환 된 열은입니다.
Word
텍스트
- Lexeme의 가치
ndoc
정수
- 문서 수 (TSVECTOR
s) 단어가 발생했습니다
Nentry
정수
- 단어의 총 발생 수
if웨이트
공급되며, 그 중 하나를 갖는 발생 만 계산됩니다.
예를 들어, 문서 컬렉션에서 가장 빈번한 10 개의 단어를 찾으려면 :
선택 *에서 TS_STAT ( 'APOD에서 벡터 선택')
동일하지만 무게로 단어 발생 만 계산A
또는B
:
선택 *에서 TS_STAT ( 'APOD에서 벡터 선택', 'AB')
문서에 올바른 것이 없으면 일치하지 않습니다.이 양식문서 문제를보고하려면