이 스포츠 토토 결과는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 토토 베이 : 17 : 12.3. 텍스트 검색 제어버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

12.3. 텍스트 검색 제어

전체 텍스트 검색을 구현하려면 기능이 있어야합니다. a 만들기TSVECTOR스포츠 토토 결과 및 A에서tsquery사용자 쿼리에서. 또한 우리는 필요합니다 유용한 순서로 결과를 반환하므로 기능이 필요합니다. 쿼리와 관련된 스포츠 토토 결과를 비교합니다. 결과를 멋지게 표시하는 것도 중요합니다.postgresql지원을 제공합니다 이 모든 기능.

12.3.1. 스포츠 토토 결과 구문 분석

PostgreSQL제공 기능to_tsvector변환 용 a 스포츠 토토 결과tsvector데이터 유형.

to_tsvector ([ config RegConfig, ]스포츠 토토 결과 텍스트) 반환tsvector

to_tsvector텍스트를 구문 분석합니다 토큰으로 스포츠 토토 결과화하고, 토큰을 Lexemes로 줄이고, A를 반환합니다.TSVECTORLexemes를 함께 나열합니다 스포츠 토토 결과에 그들의 위치가 있습니다. 스포츠 토토 결과가 처리됩니다 지정된 또는 기본 텍스트 검색 구성에 따라 간단한 예는 다음과 같습니다.

select to_tsvector ( '영어', '뚱뚱한 고양이는 매트에 앉아있었습니다 - 뚱뚱한 쥐를 먹었습니다.);
                  to_tsvector
----------------------------------------------------------------------
 'Ate': 9 'cat': 3 'fat': 2,11 'mat': 7 '쥐': 12 'sat': 4

위의 예에서 결과TSVECTOR단어가 포함되어 있지 않습니다a, on또는it, 단어및 문장 부호 표시-무시되었습니다.

theto_tsvector함수 내부적으로 스포츠 토토 결과 텍스트를 각 토큰에 유형을 토큰하고 할당합니다. 각 토큰에 대해 목록 사전 (PostgreSQL : 문서 : 9.3 : 토토 사이트 추천)가 상담되며, 여기서 목록은 토큰 유형. 첫 번째 사전인식토큰은 하나 이상의 정규화 된를 방출합니다.Lexemes토큰을 나타냅니다. 을 위한 예,rat사전 중 하나가 그것을 인식했기 때문입니다 단어복수 형태의rat. 일부 단어는로 인식됩니다.단어 중지(섹션 12.6.1), 이로 인해 발생하여 무시됩니다. 검색에 종종 유용합니다. 이 예에서는 이것들이a, onit. 목록에 사전이없는 경우 토큰을 인식 한 다음 무시됩니다. 이 예에서 문장 부호에 일어났다-실제로 토큰 유형에 할당 된 사전은 없습니다. (공간 기호), 공간 토큰을 의미합니다 색인화되지 마십시오. 파서, 사전 및이를 선택합니다 인덱스마다 토큰 유형이 선택된 텍스트 검색에 의해 결정됩니다. 구성 (PostgreSQL : 문서 : 9.3 : 토토 결과 예). 많은 다른 구성을 가질 수 있습니다 동일한 데이터베이스 및 사전 정의 된 구성을 사용할 수 있습니다 다양한 언어. 이 예에서는 기본 구성을 사용했습니다영어영어의 경우.

함수setweight를 사용할 수 있습니다 A의 항목에 레이블을 지정하려면TSVECTOR주어진웨이트, 여기서 무게는 하나입니다 편지a, B, C또는d. 이것은 일반적으로 다른 부분에서 나오는 항목을 표시하는 데 사용됩니다. 제목 대 신체와 같은 스포츠 토토 결과. 나중에이 정보는 될 수 있습니다 검색 결과 순위에 사용됩니다.

왜냐하면to_tsvector(NULL) 복귀NULL, It 사용하는 것이 좋습니다Coalesce필드가 널이 될 때마다. 권장 방법은 다음과 같습니다 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');

여기서 우리가 사용했습니다setweightTO 완성 된 각 lexeme의 소스에 라벨을 붙입니다TSVECTORTSVECTORTSVECTOR연결 연산자||. (섹션 12.4.1이 작업에 대한 세부 정보 제공.)

12.3.2. 구문 분석 쿼리

PostgreSQL제공 기능to_tsqueryandPlainto_tsquery쿼리를로 변환하려면tsquery데이터 유형.to_tsquery보다 더 많은 기능에 대한 액세스를 제공합니다plainto_tsquery이지만 적습니다 입력에 대한 용서.

to_tsquery ([ config RegConfig, ]QueryText 텍스트) 반환tsquery

to_tsquerya 생성tsqueryQueryText, 이는 단일로 구성되어야합니다 부울 운영자에 의해 분리 된 토큰&(및),|(또는) 및!(아님). 이 연산자는 그룹화 할 수 있습니다 괄호 사용. 다시 말해,에 대한 입력to_tsquery이미 일반 규칙을 따라야합니다 을 위한tsquery입력, 설명대로섹션 8.11. 차이점은 그 것입니다 기본tsquery입력은 토큰을 가져갑니다 액면가,to_tsquery정상화 지정된 또는 기본값을 사용하여 각 토큰으로 Lexeme에 구성 및 중지 단어 인 토큰을 폐기합니다 구성에 따라. 예를 들어:

select to_tsquery ( '영어', '& fat & rats');
  to_tsquery   
-----------------
 '지방'& '쥐'

BASIC에서와 같이tsquery입력, 무게는 할 수 있습니다 각 lexeme에 부착하여 일치하도록 제한하십시오TSVECTOR그 체중의 렉시 메스. 예를 들어:

select to_tsquery ( '영어', 'fat | rats : ab');
    to_tsquery    
-----------------
 '지방'| '랫트': ab

또한*lexeme에 첨부 할 수 있습니다 접두사 매칭 지정 :

select to_tsquery ( 'supern :*a & star : a*b');
        to_tsquery        
-----------------------------
 'supern':*a & 'star':*ab

그러한 Lexeme은 a의 모든 단어와 일치합니다.tsvector주어진 문자열로 시작합니다.

to_tsquery수락 할 수도 있습니다 단일 인용구. 이것은 주로 유용합니다 구성에는 트리거 될 수있는 동의어 사전이 포함되어 있습니다 그러한 문구. 아래의 예에서, 동의어 사전에는 규칙이 포함되어 있습니다Supernovae Stars : SN:

select to_tsquery ( '' 'Supernovae Stars' '&! crab');
  to_tsquery
-----------------
 'sn'&! 'crab'

따옴표없이to_tsquery의지 분리되지 않은 토큰에 대한 구문 오류를 생성하고 또는 운영자.

Plainto_tsquery ([ config RegConfig, ]QueryText 텍스트) 반환TSQUERY

Plainto_tsquery변환 형식화되지 않은 텍스트QueryTexttotsquery. 텍스트는 구문 분석되고 정규화됩니다to_tsvector, 그런 다음&(및) 부울 연산자가 삽입됩니다 살아남은 단어 사이.

예 :

plainto_tsquery ( '영어', '뚱뚱한 쥐');
 Plainto_tsquery 
------------------
 '지방'& '쥐'

참고Plainto_tsquery할 수 없습니다 부울 연산자, 웨이트 레이블 또는 접두사 매치 레이블을 인식하십시오 입력 :

plainto_tsquery ( '영어', '지방 및 쥐 : c');
   Plainto_tsquery   
--------------------
 '지방'& '쥐'& 'c'

여기, 모든 입력 구두점은 공간으로 폐기되었습니다. 기호.

12.3.3. 순위 검색 결과

순위는 관련 스포츠 토토 결과가 어떻게 관련되어 있는지 측정하려는 시도입니다. 많은 쿼리, 많은 사람들이 가장 일치 할 때 관련 항목은 먼저 표시 될 수 있습니다.PostgreSQL두 개의 사전 정의 된 순위를 제공합니다 어휘, 근접성 및 구조 정보; 즉, 쿼리가 얼마나 자주 고려됩니다 이 용어는 스포츠 토토 결과에 표시되며 용어가 얼마나 가까이 있는지 스포츠 토토 결과, 그리고 스포츠 토토 결과의 일부는 그들은 발생합니다. 그러나 관련성의 개념은 모호하고 매우입니다 응용 프로그램 별. 다른 응용 프로그램이 필요할 수 있습니다 순위를위한 추가 정보 (예 : 스포츠 토토 결과 수정) 시간. 내장 순위 기능은 예제 일뿐입니다. 당신은 할 수 있습니다 자신의 순위 기능을 작성하거나 결과를 특정 요구에 맞는 추가 요인.

현재 사용 가능한 두 순위 기능은 다음과 같습니다.

TS_RANK ([웨이트 float4 [],]Vector TSVECTOR, 쿼리 TSQUERY[, 정규화 정수]) 반환float4

일치 주파수에 따라 벡터 순위를 매 깁니다 Lexemes.

TS_RANK_CD ([웨이트 float4 [],]Vector TSVECTOR, 쿼리 tsquery[, 정규화 정수]) 반환float4

이 함수는를 계산합니다.덮개 밀도주어진 스포츠 토토 결과 벡터 및 쿼리에 대한 순위 Clarke, Cormack 및 Tudhope의 "관련성 순위 "저널"정보 처리 및 관리 ", 1999.

이 기능은 입력에 위치 정보가 필요합니다. 따라서 작동하지 않습니다"스트리핑" TSVECTOR값 - 항상 반환됩니다 영.

이 기능 모두 선택 사항웨이트인수는 무게의 능력을 제공합니다 단어 인스턴스가 얼마나 많거나 적은지에 따라 라벨이 붙었습니다. 무게 배열은 각각의 무게가 얼마나 크게 얼마나 많은지를 지정합니다 순서대로 단어 범주 :

D- 웨이트, C- 가이트, B- 가이트, A- 가이트

그렇지 않은 경우웨이트가 제공됩니다 이 기본값은 다음과 같습니다.

0.1, 0.2, 0.4, 1.0

일반적으로 가중치는 특수 영역에서 단어를 표시하는 데 사용됩니다. 제목이나 초기 초록과 같은 스포츠 토토 결과는 스포츠 토토 결과의 단어보다 다소 중요하지 않은 것으로 취급 몸.

더 긴 스포츠 토토 결과는 쿼리 용어 스포츠 토토 결과 크기를 고려하는 것이 합리적입니다. 예 : 5 개의 검색어 인스턴스가있는 백 단어 스포츠 토토 결과 아마도 5 개가있는 천 단어 스포츠 토토 결과보다 더 관련성이있을 것입니다. 인스턴스. 두 순위 기능 모두 정수를 취합니다정규화여부를 지정하는 옵션 그리고 스포츠 토토 결과의 길이가 어떻게 그 순위에 영향을 미쳐야하는지. 정수 옵션은 몇 가지 동작을 제어하므로 약간의 마스크입니다. 사용을 사용하여 하나 이상의 동작을 지정합니다|(for 예,2|4).

  • 0 (기본값)은 스포츠 토토 결과 길이를 무시합니다

  • 1 순위를 1 + 스포츠 토토 결과의 로그로 나눕니다. 길이

  • 2 스포츠 토토 결과 길이로 순위를 나눕니다

  • 4 순위를 범위 사이의 평균 고조파 거리로 나눕니다. (이것은에 의해서만 구현됩니다TS_RANK_CD)

  • 8 스포츠 토토 결과의 고유 한 단어 수로 순위를 나눕니다

  • 16 순위를 1 + 고유 수의 로그로 나눕니다. 스포츠 토토 결과의 단어

  • 32 자체로 순위를 나눕니다 + 1

둘 이상의 플래그 비트가 지정되면 변환은 나열된 주문에 적용됩니다.

순위 함수가 사용하지 않는다는 점에 유의해야합니다. 모든 글로벌 정보이므로 박람회를 생산하는 것은 불가능합니다. 때때로 원하는대로 1% 또는 100%로 정규화. 표준화 옵션 32 (RANK/(RANK+1))를 적용 할 수 있습니다 모든 순위를 범위로 제로로 확장하려면 물론 단지 미용적인 변화 일뿐입니다. 그것은 순서에 영향을 미치지 않습니다 검색 결과.

다음은 10 개의 가장 높은 순위 만 선택하는 예입니다. 성냥:

제목을 선택하여 TS_RANK_CD (TEXTSEARCH, QUERY)를 순위로 선택합니다
Apod에서 To_tsquery ( 'Neutrino | (Dark & ​​Matter)') 쿼리
query @@ textsearch
RANK 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
RANK 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 묶어서 느리게하십시오. 불행히도, 그것은 거의입니다 실용적인 쿼리는 종종 큰 결과를 가져 오기 때문에 피할 수 없습니다. 성냥의 수.

12.3.4. 결과 강조

검색 결과를 제시하려면 각각의 일부를 보여주는 것이 이상적입니다. 스포츠 토토 결과 및 쿼리와 관련된 방법. 일반적으로 검색 엔진은 검색어가 표시된 스포츠 토토 결과 조각을 보여줍니다.PostgreSQL함수 제공TS_HEADLINE이것은 이것을 구현합니다 기능성.

ts_headline ([ config RegConfig, ]스포츠 토토 결과 텍스트, 쿼리 TSQUERY[, 옵션 텍스트 ]) 반환텍스트

ts_headline스포츠 토토 결과를 수락합니다 쿼리와 함께 스포츠 토토 결과에서 발췌 한 내용을 반환합니다. 쿼리에서 어떤 용어가 강조 표시됩니다. 구성 스포츠 토토 결과를 구문 분석하는 데 사용됩니다.config; 만약에config생략,default_text_search_config구성입니다 사용된.

IF an옵션문자열입니다 지정된 쉼표로 구분 된 하나 이상의 목록으로 구성되어야합니다옵션=value쌍. 그만큼 사용 가능한 옵션은 다음과 같습니다.

  • Startsel, Stopsel: 쿼리를 삭제하는 문자열 스포츠 토토 결과에 나타나는 단어, 다른 것과 구별하기 위해 발췌 한 단어. 이 문자열을 두 배로 인용해야합니다 공백 또는 쉼표를 포함합니다.

  • maxwords, minwords:이 숫자는 가장 길고 출력에 가장 짧은 헤드 라인.

  • Shortword:이 길이 이하의 단어 헤드 라인의 시작과 끝에서 떨어질 것입니다. 기본값 세 가지 가치는 일반적인 영어 기사를 제거합니다.

  • 하이라이트: 부울 깃발; 만약에true전체 스포츠 토토 결과는 다음과 같이 사용됩니다 앞의 세 매개 변수를 무시하는 헤드 라인.

  • maxfragments: 최대 텍스트 수 발췌 또는 조각을 표시합니다. 0의 기본값이 선택됩니다 비 배양 지향 헤드 라인 생성 방법. 더 큰 가치 Zero보다 조각을 선택합니다. 이 방법 가능한 한 많은 쿼리 단어를 가진 텍스트 조각을 찾아 쿼리 단어 주위에 그 조각을 늘립니다. 결과적으로 쿼리 단어는 각 조각의 중간에 가깝고 단어가 있습니다. 각면. 각 조각은 최대입니다Maxwords및 길이의 단어Shortword이하는 시작과 끝에서 삭제됩니다 각 조각의. 모든 쿼리 단어가 스포츠 토토 결과에서 찾을 수없는 경우 그런 다음 첫 번째 조각의 단일 조각minwords스포츠 토토 결과에 표시됩니다.

  • FragmentDelimiter: 둘 이상 조각이 표시되며 조각은 이것에 의해 분리됩니다. 끈.

지정되지 않은 옵션은 다음 기본값을받습니다.

startsel = <b, stopsel = </b,
maxwords = 35, minwords = 15, shortword = 3, highlightall = false,
maxfragments = 0, fragmentDelimiter = "..."

예 :

ts_headline ( '영어',
  '가장 일반적인 유형의 검색
주어진 쿼리 용어가 포함 된 모든 스포츠 토토 결과를 찾는 것입니다
그리고 그들과 유사하게 반환하십시오.
질문.',
  to_tsquery ( '쿼리 및 유사성');
                        ts_headline                         
-------------------------------------------------------------------
 주어진 <b query </b 용어를 포함합니다
 <b 유사성 </b의 순서대로 반환하십시오.
 <b 쿼리 </b.

선택 ts_headline ( '영어',
  '가장 일반적인 유형의 검색
주어진 쿼리 용어가 포함 된 모든 스포츠 토토 결과를 찾는 것입니다
그리고 그들과 유사하게 반환하십시오.
질문.',
  to_tsquery ( '쿼리 및 유사성'),
  'startsel = <, stopsel =');
                      ts_headline                      
---------------------------------------------------------------------
 주어진 <query 용어를 포함합니다
 <유사성 순서대로 반환하십시오.
 <query.

TS_HEADLINE원본을 사용합니다 스포츠 토토 결과, ATSVECTOR요약 느리고 조심스럽게 사용해야합니다. 전형적인 실수는 전화하는 것입니다TS_HEADLINEforEvery10시에 일치하는 스포츠 토토 결과 스포츠 토토 결과가 표시됩니다.SQL하위 Queries가 도움이 될 수 있습니다. 예는 다음과 같습니다.

id, ts_headline (body, q), 순위를 선택하십시오
From (SELECT ID, BODY, Q, TS_RANK_CD (TI, Q)를 순위로
      Apod에서, to_tsquery ( 'stars') q
      여기서 ti @@ q
      RANK DESC의 주문
      제한 10) foo;