| PostgreSQL 9.3.25 스포츠 토토 베트맨 | ||||
|---|---|---|---|---|
| PostgreSQL : 스포츠 토토 결과 : 9.3 : 텍스트 검색 제어 | 사설 토토 : 문서 : 9.3 : 전문 검색 | 12장. 전체 텍스트 검색 | 다음 | |
이 섹션에서는 추가 기능 및 연산자에 대해 설명합니다. 텍스트 검색과 관련하여 유용합니다.
섹션 12.3.1원시 텍스트 스포츠 토토 베트맨를 어떻게 변환할 수 있는지 보여주었습니다.ts벡터값.포스트그레SQL또한 기능을 제공하며 이미 존재하는 스포츠 토토 베트맨를 조작하는 데 사용할 수 있는 연산자 에서ts벡터양식.
그ts벡터연결 연산자
어휘소와 위치를 결합한 벡터를 반환합니다.
인수로 제공된 두 벡터의 정보입니다. 직책과
중량 라벨은 연결 중에 유지됩니다. 직위
오른쪽 벡터에 나타나는 것은 가장 큰 값으로 오프셋됩니다.
왼쪽 벡터에 언급된 위치이므로 결과는 다음과 같습니다.
수행 결과와 거의 동일함to_tsVector둘의 연결에 대해
원본 스포츠 토토 베트맨 문자열. (동등성은 정확하지 않습니다. 왜냐하면
왼쪽 인수의 끝에서 제거된 불용어는
결과에는 영향을 미치지 않지만 결과에는 영향을 미칠 것입니다.
텍스트인 경우 오른쪽 인수의 어휘 위치
연결이 사용되었습니다.)
벡터 형식으로 연결을 사용하는 것의 장점 중 하나는
적용하기 전에 텍스트를 연결하는 것보다to_ts벡터, 다른 것을 사용할 수 있다는 것입니다
스포츠 토토 베트맨의 여러 섹션을 구문 분석하는 구성입니다. 또한,
왜냐하면설정중량기능 표시
주어진 벡터의 모든 어휘소는 동일한 방식으로 수행되어야 합니다.
텍스트를 구문 분석하고 수행설정중량연결하기 전에
무게가 다른 스포츠 토토 베트맨.
설정중량복사본을 반환합니다.
모든 위치에 라벨이 붙은 입력 벡터
주어진무게, 둘 중 하나A, B, C또는D. (D은 새 벡터의 기본값이므로 그렇지 않습니다.
출력에 표시됩니다.) 이러한 라벨은 벡터가
연결되어 스포츠 토토 베트맨의 다른 부분에 있는 단어를
순위 함수에 따라 가중치가 다르게 부여됩니다.
무게 라벨이 다음에 적용된다는 점에 유의하세요.위치, 아님어휘. 입력 벡터가 다음과 같은 경우
그 후 직위 박탈설정중량아무것도 하지 않습니다.
벡터에 저장된 어휘소 수를 반환합니다.
주어진 어휘와 동일한 어휘를 나열하는 벡터를 반환합니다. 벡터이지만 위치나 무게 정보가 부족합니다. 동안 반환된 벡터는 제거되지 않은 벡터보다 훨씬 덜 유용합니다. 관련성 순위의 경우 일반적으로 훨씬 더 작습니다.
섹션 12.3.2원시 텍스트 쿼리를 다음으로 변환하는 방법을 보여주었습니다.tsquery값.포스트그레SQL또한 기능을 제공하고 이미 쿼리를 조작하는 데 사용할 수 있는 연산자 에서tsquery양식.
주어진 두 쿼리의 AND 조합을 반환합니다.
주어진 두 쿼리의 OR 조합을 반환합니다.
주어진 쿼리의 부정(NOT)을 반환합니다.
a의 노드 수(어휘 + 연산자)를 반환합니다.tsquery. 이 기능은 다음을 결정하는 데 유용합니다. 만약에질의의미 있음(반환 0) 또는 중지 단어만 포함합니다(0 반환). 예:
SELECT numnode(plainto_tsquery('모든'));
주의사항: 쿼리에 불용어만 포함되어 있거나 어휘소가 포함되어 있지 않습니다. 무시됩니다.
숫자 노드
---------
0
SELECT numnode('foo & bar'::tsquery);
숫자 노드
---------
3a의 일부를 반환합니다.tsquery그럴 수 있어요 인덱스 검색에 사용됩니다. 이 기능은 다음에 유용합니다. 색인을 생성할 수 없는 쿼리 감지(예: 다음 항목만 포함하는 쿼리) 단어를 중지하거나 용어를 부정할 뿐입니다. 예를 들면:
SELECT querytree(to_tsquery('!defined'));
쿼리 트리
-----------그ts_rewrite함수 계열
주어진 것을 검색하세요tsquery다음 발생의 경우
하위 쿼리를 대상으로 하고 각 항목을 대체 항목으로 바꿉니다.
하위 쿼리. 본질적으로 이 작업은 다음과 같습니다.tsquery부분 문자열 교체의 특정 버전입니다. 에이
대상과 대체 조합은 다음과 같이 생각할 수 있습니다.쿼리 재작성 규칙. 그러한 재작성 모음
규칙은 강력한 검색 도구가 될 수 있습니다. 예를 들어
동의어를 사용하여 검색(예:뉴욕,
큰 사과, 뉴욕,
고담) 또는 검색 범위를 좁혀
사용자에게 인기 있는 주제를 알려주세요. 기능상 일부 중복되는 부분이 있습니다.
이 기능과 동의어 사전 사이(섹션
12.6.4). 그러나 다시 쓰기 규칙 집합을 수정할 수 있습니다.
다시 색인화하지 않고 즉석에서 동의어 사전을 업데이트하는 동안
효과적이려면 색인을 다시 생성해야 합니다.
이 형태는ts_rewrite간단히
단일 재작성 규칙을 적용합니다.대상다음으로 대체됨대체어디에나 나타나는지질의. 예를 들면:
SELECT ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'c'::tsquery);
ts_rewrite
------------
'b' & 'c'이 형식은ts_rewrite수락
시작질의그리고 SQL선택텍스트로 제공되는 명령
문자열.선택2개를 산출해야 합니다.
열tsquery유형. 의 각 행에 대해선택결과, 다음 발생
첫 번째 열 값(대상)이 두 번째 열로 대체됩니다.
현재 내의 값(대체)질의값. 예를 들면:
CREATE TABLE 별칭(t tsquery PRIMARY KEY, s tsquery);
INSERT INTO 별칭 VALUES('a', 'c');
SELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM 별칭');
ts_rewrite
------------
'b' & 'c'
여러 재작성 규칙이 이런 방식으로 적용될 때, 신청 순서가 중요할 수 있습니다. 그래서 실제로는 소스 쿼리를 원합니다.주문 기준일부 주문 키입니다.
실제 천문학적 예를 생각해 봅시다. 확장해보겠습니다 쿼리초신성테이블 기반 사용 재작성 규칙:
CREATE TABLE 별칭(t tsquery 기본 키, s tsquery);
INSERT INTO 별칭 VALUES(to_tsquery('supernovae'), to_tsquery('supernovae|sn'));
SELECT ts_rewrite(to_tsquery('초신성 & 게'), 'SELECT * FROM 별칭');
ts_rewrite
---------------------------------
'게' & ( '초신성' | 'sn' )
우리는 단지 업데이트만으로 다시 쓰기 규칙을 변경할 수 있습니다 테이블:
별칭 업데이트
SET s = to_tsquery('초신성|sn & !성운')
어디서 t = to_tsquery('초신성');
SELECT ts_rewrite(to_tsquery('초신성 & 게'), 'SELECT * FROM 별칭');
ts_rewrite
--------------------------------
'게' & ( '초신성' | 'sn' & !'성운' )
재작성 규칙이 많으면 재작성이 느려질 수 있습니다. 가능한 일치 여부에 대해 모든 규칙을 확인합니다. 명백한 것을 필터링하려면 비후보 규칙에 대해 포함 연산자를 사용할 수 있습니다.tsquery유형. 아래 예에서는 다음을 선택합니다. 원래 쿼리와 일치할 수 있는 규칙만:
SELECT ts_rewrite('a & b'::tsquery,
'SELECT t,s FROM 별칭 WHERE ''a & b''::tsquery @ t');
ts_rewrite
------------
'b' & 'c'별도의 열을 사용하여 저장하는 경우ts벡터귀하의 스포츠 토토 베트맨를 표현하는 것입니다. 업데이트하기 위해 트리거를 만드는 데 필요합니다.ts벡터스포츠 토토 베트맨 내용 열일 때 열 변화. 이를 위해 두 가지 내장 트리거 기능을 사용할 수 있습니다. 직접 작성하셔도 됩니다.
tsVector_update_trigger(tsVector_column_name, config_name, text_column_name [, ... ]) tsVector_update_trigger_column(tsVector_column_name, config_column_name, text_column_name [, ... ])
이러한 트리거 기능은 자동으로 다음을 계산합니다.ts벡터하나 이상의 텍스트 열의 열, 아래 에 지정된 매개변수 제어트리거 생성명령. 사용 예 다음과 같습니다:
CREATE TABLE 메시지(
제목 텍스트,
본문 텍스트,
tsv ts벡터
);
삽입 또는 업데이트 전에 tsVectorupdate 트리거 생성
각 행 실행 절차에 대한 ON 메시지
tsVector_update_trigger(tsv, 'pg_catalog.english', 제목, 본문);
INSERT INTO message VALUES('제목은 여기에 있습니다', '본문은 여기에 있습니다');
SELECT * FROM 메시지;
제목 | 몸 | TSV
------------+------------+----------------------------
여기에 제목 | 본문 텍스트는 여기에 있습니다 | '보디':4 '텍스트':5 '제목':1
SELECT 제목, 본문 FROM 메시지 WHERE tsv @@ to_tsquery('title & body');
제목 | 몸
----------+------------
여기에 제목 | 본문 텍스트는 여기에 있습니다
이 트리거를 생성한 후에는 다음 사항이 변경됩니다.제목또는몸할 것이다 자동으로 반영됩니다tsv, 애플리케이션이 걱정할 필요가 없습니다.
첫 번째 트리거 인수는 다음의 이름이어야 합니다.ts벡터열이 업데이트됩니다. 두 번째 주장
다음을 수행하는 데 사용할 텍스트 검색 구성을 지정합니다.
전환. 에 대한tsVector_update_trigger, 구성 이름
단순히 두 번째 트리거 인수로 제공됩니다. 반드시
위에 표시된 대로 스키마 정규화를 통해 트리거 동작이
변경 사항에 따라 변경되지 않음검색_경로.
에 대한tsVector_update_trigger_column,
두 번째 트리거 인수는 다른 테이블 열의 이름입니다.
유형이어야 합니다.regconfig. 이를 통해
행별로 구성을 선택할 수 있습니다. 남은
인수는 (유형의) 텍스트 열 이름입니다.텍스트, varchar또는문자). 이러한 내용은 다음 스포츠 토토 베트맨에 포함됩니다.
주문이 주어졌습니다. NULL 값은 건너뜁니다(그러나 다른 열은
여전히 색인이 생성됩니다.)
이러한 내장 트리거의 한계는 모든 트리거를 처리한다는 것입니다. 입력 열은 동일합니다. 열을 다르게 처리하려면 — 예를 들어 본문과 다르게 제목에 가중치를 부여하려면 사용자 정의 트리거를 작성합니다. 다음은를 사용한 예입니다.PL/pgSQL트리거 언어로:
CREATE FUNCTION message_trigger() $$로 트리거를 반환합니다.
시작하다
새로운.tsv :=
setweight(to_tsVector('pg_catalog.english', coalesce(new.title,'')), 'A') ||
setweight(to_tsVector('pg_catalog.english', coalesce(new.body,'')), 'D');
새로운 것을 반환하십시오;
끝
$$ 언어 plpgsql;
삽입 또는 업데이트 전에 tsVectorupdate 트리거 생성
각 행 실행 절차에 대한 ON 메시지 message_trigger();
구성을 지정하는 것이 중요하다는 점을 명심하십시오 생성 시 명시적으로 이름 지정ts벡터값 열의 내용이 영향을 받지 않도록 트리거 내부 다음으로 변경:default_text_search_config. 그렇지 않으면 검색 등의 문제가 발생할 가능성이 높습니다. 덤프 및 다시 로드 후에 결과가 변경됩니다.
함수ts_stat다음에 유용합니다.
구성을 확인하고 불용어를 찾기 위해
후보자.
ts_stat(sqlquery 텍스트, [ 가중치 텍스트, ]
아웃단어 텍스트, 아웃ndoc 정수,
아웃넨트리 정수) 반환레코드 집합
sqlquery텍스트 값입니다.
단일을 반환해야 하는 SQL 쿼리가 포함되어 있습니다.ts벡터열.ts_stat쿼리를 실행하고 각 고유 항목에 대한 통계를 반환합니다.
에 포함된 어휘소(단어)ts벡터데이터.
반환된 열은 다음과 같습니다.
단어 텍스트— 어휘소의 값
ndoc 정수— 스포츠 토토 베트맨 수(ts벡터s) 해당 단어는에서 발생했습니다.
넨트리 정수— 해당 단어의 총 발생 횟수
만약가중치제공됩니다. 해당 가중치 중 하나를 갖는 발생이 계산됩니다.
예를 들어, 스포츠 토토 베트맨에서 가장 자주 사용되는 10개의 단어를 찾으려면 컬렉션:
SELECT * FROM ts_stat('아팟에서 벡터 선택')
ORDER BY nentry DESC, ndoc DESC, 단어
10개 제한;
동일하지만 가중치가 있는 단어 발생만 계산A또는B:
SELECT * FROM ts_stat('SELECT 벡터 FROM apod', 'ab')
ORDER BY nentry DESC, ndoc DESC, 단어
10개 제한;| 이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
| 텍스트 제어 검색 | 위로 | 파서 |