전체 텍스트 검색을 구현하려면 기능이 있어야합니다. a 만들기tsvector범퍼카 토토 및 A에서tsquery사용자 쿼리에서. 또한 우리는 필요합니다 유용한 순서로 결과를 반환하므로 기능이 필요합니다. 쿼리와 관련된 범퍼카 토토를 비교합니다. 결과를 멋지게 표시하는 것도 중요합니다.postgresql지원을 제공합니다 이 모든 기능.
PostgreSQL제공
기능to_tsvector
범퍼카 토토를로 변환tsvector데이터 유형.
to_tsvector ([ config RegConfig, ]Document 텍스트) 반환tsvector
to_tsvector
텍스트를 구문 분석합니다
토큰으로 범퍼카 토토화하고, 토큰을 Lexemes로 줄입니다
a 반환tsvector111PostgreSQL : 범퍼카 토토 : 8.3 : 텍스트 검색 제어45
select to_tsvector ( '영어', '뚱뚱한 고양이는 매트에 앉아 뚱뚱한 쥐를 먹었습니다.); to_tsvector ---------------------------------------------------------------------- 'Ate': 9 'cat': 3 'fat': 2,11 'mat': 7 '쥐': 12 'sat': 4
위의 예에서 결과tsvector단어가 포함되어 있지 않습니다a, on또는it, 단어쥐rat및 문장 부호-무시되었습니다.
theto_tsvector
함수
내부적으로 범퍼카 토토 텍스트를
각 토큰에 유형을 토큰하고 할당합니다. 각 토큰에 대해 목록
사전 (스포츠 토토 PostgreSQL)가 상담되며,이 목록은
토큰 유형. 첫 번째 사전인식토큰은 하나 이상을 방출합니다
정규화Lexemes토큰. 예를 들어,12527_12533rat사전 중 하나 때문입니다
단어를 인식했다쥐is
복수 형태rat. 어떤 단어는
로 인정단어 중지(섹션
12.6.1), 이로 인해 발생하면 무시됩니다.
검색에 유용하기에는 너무 자주. 이 예에서는 이것들입니다
이다a, on,
그리고it. 목록에 사전이없는 경우
토큰을 인식 한 다음 무시됩니다. 이 예에서
문장 부호에 일어난 일-실제로 사전이 없기 때문입니다
토큰 유형에 할당 (공간
기호), 공간 토큰은 결코 색인되지 않습니다. 그만큼
파서, 사전 선택 및 어떤 유형의 토큰
인덱스는 선택한 텍스트 검색 구성에 의해 결정됩니다
(PostgreSQL : 문서 : 8.3 : 토토 예). 그것
동일하게 다양한 구성을 가질 수 있습니다.
데이터베이스 및 사전 정의 된 구성을 사용할 수 있습니다
다양한 언어. 이 예에서는 기본값을 사용했습니다
구성영어영어
언어.
함수setweight
할 수 있습니다
a의 레이블을 지정하는 데 사용됩니다.TSVECTOR주어진웨이트편지 중 하나a, B, C또는d. 이것은 일반적으로 항목을 표시하는 데 사용됩니다
제목 대 신체와 같은 범퍼카 토토의 다른 부분에서.
나중에이 정보는 검색 순위에 사용될 수 있습니다.
결과.
왜냐하면to_tsvector
(NULL) 복귀NULL,
사용하는 것이 좋습니다Coalesce
필드가 null이 될 때마다. 권장 방법은 다음과 같습니다
A 생성TSVECTOR구조화 된
범퍼카 토토:
업데이트 tt set ti = setweight (to_tsvector (Coalesce (title, '')), 'a') || setweight (to_tsvector (Coalesce (키워드, ''), 'b') || setweight (to_tsvector (Coalesce (Abstract, '')), 'c') || setweight (to_tsvector (Coalesce (body, '')), 'd');
여기서 우리가 사용한setweight
to
완성 된 각 lexeme의 소스에 라벨을 붙입니다tsvectorTSVECTORTSVECTOR연결 연산자||. (섹션
12.4.1이러한 작업에 대한 세부 정보 제공.)
PostgreSQL제공
기능to_tsquery
andPlainto_tsquery
변환 용 a
쿼리tsquery데이터 유형.to_tsquery
더 많은 액세스를 제공합니다
보다 특징plainto_tsquery
,
그러나 입력에 대해 덜 용서합니다.
to_tsquery ([ config RegConfig, ]QueryText 텍스트) 반환tsquery
to_tsquery
a 생성tsquery값QueryText는 단일로 구성되어야합니다
부울 운영자에 의해 분리 된 토큰&(및),|(또는) 및!(아님). 이 운영자는 될 수 있습니다
괄호를 사용하여 그룹화되었습니다. 다시 말해,에 대한 입력TO_TSQUERY
이미 따라야합니다
에 대한 일반적인 규칙tsquery입력, AS
설명PostgreSQL :. 차이점은 기본적으로TSQUERY입력 토큰을 액면가로 가져옵니다.to_tsquery
각 토큰을 정상화합니다
지정된 또는 기본 구성을 사용하여 Lexeme에
에 따라 중지 단어 인 토큰을 폐기합니다.
구성. 예를 들어:
select to_tsquery ( '영어', '& fat & rats'); to_tsquery ----------------- '지방'& '쥐'
BASIC에서와 같이tsquery입력, 무게 (들) 각 lexeme에 부착하여 일치하도록 제한 할 수 있습니다TSVECTOR그 체중의 렉시 메스. 을 위한 예:
to_tsquery ( '영어', '지방 | 쥐 : AB'); to_tsquery ----------------- '지방'| '랫트': ab
to_tsquery
도 수락 할 수 있습니다
단일 인용구. 이것은 주로 유용합니다
구성에는 트리거 될 수있는 동의어 사전이 포함되어 있습니다
그러한 문구에. 아래의 예에서, 동의어 사전에는 다음을 포함합니다
규칙Supernovae Stars : SN:
select to_tsquery ( '' '초신성 스타' '&! crab'); to_tsquery ----------------- 'sn'&! 'crab'
따옴표없이to_tsquery
분리되지 않은 토큰에 대한 구문 오류가 발생합니다.
및 OR OR OPERATOR에 의해.
Plainto_tsquery ([ config RegConfig, ]QueryText 텍스트) 반환tsquery
Plainto_tsquery
변환
형식화되지 않은 텍스트QueryTexttoTSQUERY. 텍스트는 구문 분석됩니다
와 마찬가지로 정규화to_tsvector
, 그런 다음&(및) 부울 연산자가 삽입됩니다
살아남은 단어.
예 :
plainto_tsquery ( '영어', '뚱뚱한 쥐')를 선택하십시오. Plainto_tsquery ------------------ '지방'& '쥐'
참고Plainto_tsquery
부울 연산자 나 체중 레이블을 인식 할 수 없습니다
입력 :
plainto_tsquery ( '영어', '지방 및 쥐 : c'); Plainto_tsquery -------------------- '지방'& '쥐'& 'c'
여기, 모든 입력 구두점은 공간으로 폐기되었습니다. 기호.
순위 순위는 범퍼카 토토가 어떻게 관련되어 있는지 측정하려는 시도입니다. 많은 쿼리, 많은 사람들이 가장 일치 할 때 관련 항목은 먼저 표시 될 수 있습니다.postgresql두 개의 사전 정의 된 순위를 제공합니다 어휘, 근접성 및 구조 정보; 즉, 그들은 얼마나 자주 고려합니다 범퍼카 토토에 쿼리 용어가 나타납니다. 용어는 범퍼카 토토에 있으며 그들이 어디에서 발생하는지 범퍼카 토토화하십시오. 그러나 관련성의 개념은 다음과 같습니다 모호하고 매우 적용 특정. 다른 응용 프로그램 순위에 대한 추가 정보가 필요할 수 있습니다 (예 : 범퍼카 토토 수정 시간. 내장 순위 기능은 전용입니다 예. 자신의 순위 기능을 작성할 수 있습니다 결과를 추가 요인과 결합하여 귀하에게 적합합니다 특정 요구.
현재 사용 가능한 두 순위 기능은 다음과 같습니다.
TS_RANK ([ 웨이트 float4 [], ]Vector tsvector, 쿼리 TSQUERY[, 정규화 Integer ]) 반환float4
표준 순위 기능.
TS_RANK_CD ([ 웨이트 float4 [], ]Vector TSVECTOR, Query TSQUERY[, 정규화 Integer ]) 반환float4
이 함수는를 계산합니다.표지 밀도지정된 범퍼카 토토 벡터에 대한 순위 Clarke, Cormack 및 Tudhope 's에 설명 된대로 쿼리 "1 ~ 3 개의 용기 쿼리에 대한 관련성 순위"에서 저널 "정보 처리 및 관리", 1999.
이 기능은 위치 정보가 필요합니다 입력. 따라서 작동하지 않습니다"스트리핑" TSVECTOR값 - 항상 0을 반환합니다.
이 기능 모두 선택 사항웨이트인수는 능력을 제공합니다 단어 인스턴스가 어떻게 무게를 측정하는지에 따라 레이블이 붙어 있습니다. 무게 어레이는 무게가 얼마나 크게 얼마나 많은지를 지정합니다 순서대로 각 단어 범주 :
D- 웨이트, C- 가이트, B- 가이트, A- 가이트
그렇지 않은 경우웨이트제공됩니다. 그러면 이러한 기본값이 사용됩니다.
0.1, 0.2, 0.4, 1.0
일반적으로 가중치는 특수 영역에서 단어를 표시하는 데 사용됩니다. 제목이나 초기 초록과 같은 범퍼카 토토의 그들은 말보다 다소 중요한 것으로 취급 될 수 있습니다. 범퍼카 토토 바디.
더 긴 범퍼카 토토는 쿼리 용어 범퍼카 토토 크기를 고려하는 것이 합리적입니다. 예를 들어 5 개의 검색 인스턴스가있는 백 단어 범퍼카 토토 단어는 아마도 천 단어 범퍼카 토토보다 더 관련이있을 것입니다 5 개의 인스턴스가 있습니다. 두 순위 기능 모두 정수를 취합니다정규화옵션 범퍼카 토토의 길이가 그 영향에 어떤 영향을 미치는지 여부를 지정합니다. 계급. 정수 옵션은 몇 가지 동작을 제어하므로 비트 마스크 :를 사용하여 하나 이상의 동작을 지정할 수 있습니다|(예 :2|4).
0 (기본값)은 범퍼카 토토 길이를 무시합니다
1 순위를 1 + 범퍼카 토토의 로그로 나눕니다. 길이
2 범퍼카 토토 길이로 순위를 나눕니다
24538_24642TS_RANK_CD
)
8 순위를 고유 한 단어의 수로 나눕니다. 범퍼카 토토
16은 순위를 1 + 숫자의 로그를 1 +로 나눕니다. 범퍼카 토토의 독특한 단어
32 자체로 순위를 나눕니다 + 1
둘 이상의 플래그 비트가 지정되면 변환 나열된 순서로 적용됩니다.
순위 함수는 그렇지 않다는 점에 유의해야합니다. 글로벌 정보를 사용하므로 때때로 원하는대로 1% 또는 100%로 공정한 정규화. 정규화 옵션 32 (RANK/(RANK+1))는 모든 순위를 확장하기 위해 적용 할 수 있습니다 0에서 1까지 범위로, 물론 이것은 단지 미용 적 변화; 검색 순서에는 영향을 미치지 않습니다 결과.
여기에 가장 높은 순위 만 선택하는 예는 다음과 같습니다. 성냥:
제목을 선택하여 TS_RANK_CD (TEXTSEARCH, QUERY)를 순위로 선택합니다 Apod에서 To_tsquery ( 'Neutrino | (Dark & Matter)') 쿼리 query @@ textsearch 순위에 의한 주문 desc 한계 10; 제목 | 계급 ------------------------------------------------------------------- 태양의 중성미자 | 3.1 Sudbury Neutrino Detector | 2.4 은하의 암흑 물질의 사나이보기 | 2.01317 뜨거운 가스와 암흑 물질 | 1.91171 처녀 자리 클러스터 : 뜨거운 혈장과 암흑 물질 | 1.90953 태양 중성미자 래프팅 | 1.9 NGC 4650A : 이상한 은하와 암흑 물질 | 1.85774 뜨거운 가스와 암흑 물질 | 1.6123 우주 중성미자를위한 얼음 낚시 | 1.6 약한 렌즈는 우주를 왜곡합니다 | 0.818218
이것은 정규화 된 순위를 사용하는 것과 동일한 예입니다 :
제목 선택, TS_RANK_CD (TEXTSEARCH, QUERY, 32/ * RANK/(RANK+1) */) Apod에서 To_tsquery ( 'Neutrino | (Dark & Matter)') 쿼리 query @@ textsearch 순위에 의한 주문 desc 한계 10; 제목 | 계급 ----------------------------------------------------------------------------- 태양의 중성미자 | 0.756097569485493 Sudbury Neutrino Detector | 0.705882361190954 은하의 암흑 물질의 사나이보기 | 0.668123210574724 뜨거운 가스와 암흑 물질 | 0.65655958650282 처녀 자리 클러스터 : 뜨거운 혈장과 암흑 물질 | 0.656301290640973 태양 중성미자 래프팅 | 0.65172410958162 NGC 4650A : 이상한 은하와 암흑 물질 | 0.650072921219637 뜨거운 가스와 암흑 물질 | 0.617195790024749 우주 중성미자를위한 얼음 낚시 | 0.615384618911517 약한 렌즈는 우주를 왜곡합니다 | 0.450010798361481
순위는 컨설팅이 필요하기 때문에 비용이 많이들 수 있습니다TSVECTOR각 일치하는 범퍼카 토토의 I/O 묶을 수 있으므로 느리게 할 수 있습니다. 불행히도, 그것은입니다 실제 쿼리가 종종 발생하기 때문에 피하기는 거의 불가능합니다 많은 수의 경기에서.
검색 결과를 제시하려면 각각의 일부를 보여주는 것이 이상적입니다.
범퍼카 토토 및 쿼리와 관련된 방법. 일반적으로 검색
엔진은 검색 된 검색으로 범퍼카 토토 조각을 보여줍니다
자귀.PostgreSQL제공 a
기능TS_HEADLINE
이 기능을 구현합니다.
ts_headline ([ config RegConfig, ]범퍼카 토토 텍스트, 쿼리 TSQUERY[, 옵션 텍스트 ]) 반환텍스트
TS_HEADLINE
범퍼카 토토를 수락합니다
쿼리와 함께 범퍼카 토토에서 발췌 한 내용을 반환합니다.
쿼리에서 어떤 용어가 강조 표시됩니다. 구성
범퍼카 토토를 구문 분석하는 데 사용하려면 범퍼카 토토를 지정할 수 있습니다.config; 만약에config생략,default_text_search_config구성입니다
사용된.
IF an옵션문자열은 지정된 쉼표로 구분 된 쉼표로 구성되어야합니다. 더옵션=value쌍. 사용 가능한 옵션은 다음과 같습니다.
Startsel, Stopsel: 쿼리 단어가있는 문자열 범퍼카 토토에 나타나는 것은 구분해야합니다 다른 발췌 한 단어와 구별하십시오.
maxwords, minwords:이 숫자를 결정합니다 출력에 가장 길고 가장 짧은 헤드 라인.
Shortword:이 길이의 단어 헤드 라인의 시작과 끝에서 삭제됩니다. 3의 기본값은 영어를 제거합니다 조항.
하이라이트: 부울 플래그; 만약에true전체 범퍼카 토토가 있습니다 강조 표시.
지정되지 않은 옵션은 다음 기본값을받습니다.
startsel = <b, stopsel = </b, maxwords = 35, minwords = 15, shortword = 3, hightodall = false
예 :
ts_headline ( '영어', '가장 일반적인 유형의 검색 유형 주어진 쿼리 용어가 포함 된 모든 범퍼카 토토를 찾는 것입니다 그리고 그들과 유사하게 반환하십시오. query. ', to_tsquery ('쿼리 및 유사성 ')); ts_headline ------------------------------------------------------------------- <b 쿼리 </b 용어가 주어졌습니다 <b 유사성 </b의 순서대로 반환하십시오. <b 쿼리 </b. ts_headline ( '영어', '가장 일반적인 유형의 검색 유형을 선택하십시오 주어진 쿼리 용어가 포함 된 모든 범퍼카 토토를 찾는 것입니다 그리고 그들과 유사하게 반환하십시오. 질문.', to_tsquery ( '쿼리 및 유사성'), 'startsel = <, stopsel ='); ts_headline --------------------------------------------------------------------- 주어진 <query 용어 <유사성 순서대로 반환하십시오. <query.
TS_HEADLINE
원본을 사용합니다
범퍼카 토토, ATSVECTOR요약
느리게 할 수 있으며주의해서 사용해야합니다. 전형적인 실수는입니다
전화하려면ts_headline
forEvery일치
10 개의 범퍼카 토토 만 표시 될 때 범퍼카 토토화합니다.SQL하위 쿼리가 도움이 될 수 있습니다.
예는 다음과 같습니다.
id, ts_headline (body, q), 순위를 선택하십시오 From (SELECT ID, BODY, Q, TS_RANK_CD (TI, Q)를 순위로 Apod에서, to_tsquery ( 'stars') q 여기서 ti @@ q RANK DESC LIMIT 10)별로 foo;로 주문하십시오.