젠 토토 : 문서 : 9.6 | |||
---|---|---|---|
PostgreSQL : 토토 꽁 머니 : 9.6 : 텍스트 검색 제어 | 사설 토토 사이트 : 문서 : 9.6 : 전문 검색 | 12 장. 전문 검색 | PostgreSQL : 문서 : 9.6 : 토토 사이트 |
이 섹션은 텍스트 검색과 관련하여 유용한 추가 롤 토토 및 연산자를 설명합니다.
섹션 12.3.1원시 텍스트 문서가 어떻게 변환 될 수 있는지 보여주었습니다tsvector값.롤 토토이미있는 문서를 조작하는 데 사용할 수있는 롤 토토과 연산자도 제공합니다.tsvectorForm.
thetsvector연결 연산자는 인수로 주어진 두 벡터의 Lexemes와 위치 정보를 결합한 벡터를 반환합니다. 위치 및 중량 라벨은 연결 중에 유지됩니다.to_tsvector
두 개의 원본 문화 문자열의 연결. (왼쪽 인수의 끝에서 제거 된 중지 단어는 결과에 영향을 미치지 않기 때문에 동등성은 정확하지 않습니다. 반면, 텍스트 관련성이 사용 된 경우 오른쪽 인수에서 Lexemes의 위치에 영향을 미쳤을 것입니다.).
적용하기 전에 텍스트를 연결하기보다는 벡터 형태의 연결을 사용하는 한 가지 장점to_tsvector
, 다른 구성을 사용하여 문서의 다른 섹션을 구문 분석 할 수 있습니다. 또한 때문에setweight
함수는 주어진 벡터의 모든 lexemes를 동일한 방식으로 표시합니다. 텍스트를 구문 분석하고 수행해야합니다setweight
문서의 다른 부분에 다른 가중치로 레이블을 지정하려는 경우 연결하기 전에.
setweight
모든 위치가 주어진 상태로 표시된 입력 벡터의 사본을 반환합니다weight, 어느A, B, C또는D. (D새 벡터의 기본값이며 출력에 표시되지 않습니다.)이 레이블은 벡터가 연결되면 유지되므로 롤 토토 순위에 따라 문서의 다른 부분의 단어가 다르게 가중 될 수 있습니다..
무게 라벨이 적용됨위치, 아님Lexemes. 입력 벡터가 위치를 제거한 경우setweight
아무것도하지 않습니다.
벡터에 저장된 Lexemes의 수를 반환합니다.
주어진 벡터와 동일한 lexemes를 나열하는 벡터를 반환하지만 위치 또는 중량 정보가 부족합니다. 결과는 일반적으로 스트리핑되지 않은 벡터보다 훨씬 작지만 덜 유용합니다.<-->(이하)tsquery운영자는 렉소 발생 사이의 거리를 결정할 수 없기 때문에 스트리핑 입력과 일치하지 않습니다.
전체 목록tsvector-관련 함수는에서 사용할 수 있습니다표 9-40.
섹션 12.3.2원시 텍스트 쿼리를 어떻게 변환 할 수 있는지 보여주었습니다tsquery값.롤 토토이미있는 쿼리를 조작하는 데 사용할 수있는 함수 및 연산자도 제공합니다.tsqueryForm.
주어진 두 쿼리의 반환 및 계약을 반환합니다.
주어진 쿼리의 또는 전달을 반환합니다.
주어진 쿼리의 부정을 반환합니다.
즉시 주어진 첫 번째 쿼리와 일치하는 쿼리를 반환 한 다음 즉시 주어진 쿼리와 일치하는 쿼리를 반환합니다.<-->(이하)tsquery운영자. 예를 들어:
select to_tsquery ( 'fat') <-> to_tsquery ( 'cat | rat');
첫 번째 주어진 쿼리와 일치하는 쿼리를 반환 한 다음 정확히 거리에서 두 번째 주어진 쿼리와 일치하는 쿼리를 반환합니다.거리lexemes, 사용<N tsquery운영자. 예를 들어:
tsquery_phrase (to_tsquery ( 'fat'), to_tsquery ( 'cat'), 10);
A에서 노드 수 (Lexemes + 연산자)의 수를 반환합니다tsquery. 이 롤 토토은를 결정하는 데 유용합니다.쿼리는 의미가 있거나 (반환> 0) 또는 중지 단어 만 포함합니다 (반환 0). 예 :
Numnode (Plainto_tsQuery ( 'The Any'))를 선택합니다.
A의 부분을 반환합니다tsquery인덱스 검색에 사용할 수 있습니다. 이 기능은 무시 할 수없는 쿼리, 예를 들어 중지 단어 만 포함하는 쿼리를 감지하는 데 유용합니다.
QueryTree를 선택합니다 (To_tsQuery ( '! defined'));
theTS_REWRITE
롤 토토 가족 검색 주어진tsquery대상 하위 쿼리의 발생에 대해서는 각 발생을 대체 하위 쿼리로 교체합니다. 본질적 으로이 작업은입니다.tsquery-특이 적 버전의 서브 스트링 교체. 대상과 대체 조합은 A로 생각할 수 있습니다.쿼리 rewrite rule. 이러한 다시 쓰기 규칙의 모음은 강력한 검색 원조가 될 수 있습니다.뉴욕, Big Apple, NYC, 고담) 또는 검색을 좁히기 위해 사용자를 핫 주제로 안내합니다. 이 기능과 동의어 사전 사전 사이에는 기능이 중복됩니다 (섹션 12.6.4). 그러나, 당신은 다시 문지인없이 다시 쓰기 규칙 세트를 수정할 수 있지만, 동의어 사전을 업데이트하려면 reindexing이 효과적이어야합니다.
이 형태의TS_REWRITE
단순히 단일 재 작성 규칙을 적용합니다 :대상로 대체대체어디에서나쿼리. 예를 들어:
TS_REWRITE ( 'A & B':: TSQUERY, 'A':: TSQUERY, 'C':: TSQUERY);
이 형태의TS_REWRITE
시작을 허용쿼리및 SQLselect명령은 텍스트 문자열로 제공됩니다. 그만큼select두 열의 열을 생산해야합니다tsquery타입. 의 각 행에 대해select결과, 첫 번째 열 값 (대상)의 발생은 전류 내에서 두 번째 열 값 (대체)으로 대체됩니다.쿼리값. 예를 들어:
테이블 별칭 생성 (t tsquery 기본 키, s tsquery);
여러 재 작성 규칙이 이러한 방식으로 적용되면 응용 프로그램 순서가 중요 할 수 있습니다. 실제로 소스 쿼리를 원할 것입니다.주문 by일부 주문 키.
실제 천문학적 사례를 고려해 봅시다. 쿼리를 확장 할 것입니다Supernovae테이블 구동 재 작성 규칙 사용 :
테이블 별칭 생성 (t tsquery 기본 키, SSQuery);
테이블을 업데이트하여 재 작성 규칙을 변경할 수 있습니다.
별명 업데이트
가능한 모든 규칙을 확인하기 때문에 많은 재 작성 규칙이있을 때 다시 쓰기가 느려질 수 있습니다. 명백한 비 후급 규칙을 필터링하기 위해 우리는 |tsquery타입. 아래 예에서는 원래 쿼리와 일치 할 수있는 규칙 만 선택합니다.
TS_REWRITE ( 'A & B':: TSQUERY,
별도의 열을 사용하여 저장할 때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 정수) 반환Setof Record
sqlquery| 단일을 반환 해야하는 SQL 쿼리가 포함 된 텍스트 값입니다.tsvector열.TS_STAT
쿼리를 실행하고에 포함 된 각 고유 한 Lexeme (Word)에 대한 통계를 반환합니다tsvector데이터. 반환 된 열은입니다.
Word 텍스트- Lexeme의 값
ndoc 정수- 문서 수 (tsvectors) 단어가 발생했습니다.
Nentry 정수- 단어의 총 발생 수
if웨이트공급되며, 무게 중 하나를 갖는 발생 만 계산됩니다.
예를 들어, 문서 컬렉션에서 가장 빈번한 10 가지 단어를 찾으려면 :
선택 *에서 TS_STAT ( 'APOD에서 벡터 선택')
동일하지만 무게로 단어 발생 만 세는 것A또는B:
선택 *에서 ts_stat ( 'APOD에서 벡터 선택', 'ab')