이 범퍼카 토토는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 토토 베이 : 17 : 12.3. 텍스트 검색 제어버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

12.3. 텍스트 검색 제어

전체 텍스트 검색을 구현하려면 다음을 생성하는 기능이 있어야 합니다.ts벡터범퍼카 토토 및 a에서tsquery사용자 쿼리에서. 또한 유용한 순서로 결과를 반환해야 하므로 쿼리와의 관련성을 기준으로 범퍼카 토토를 비교하는 기능이 필요합니다. 결과를 멋지게 표시할 수 있는 것도 중요합니다.PostgreSQL이 모든 기능을 지원합니다.

12.3.1. 범퍼카 토토 분석

PostgreSQL기능 제공to_tsVector범퍼카 토토를 다음으로 변환하기 위해ts벡터데이터 유형.

to_ts벡터([ 구성 regconfig, ] 범퍼카 토토 텍스트) 반환ts벡터

to_ts벡터텍스트 범퍼카 토토를 토큰으로 구문 분석하고 토큰을 어휘소로 줄이고 다음을 반환합니다.ts벡터범퍼카 토토에서의 위치와 함께 어휘를 나열합니다. 범퍼카 토토는 지정된 또는 기본 텍스트 검색 구성에 따라 처리됩니다. 다음은 간단한 예입니다.

SELECT to_tsVector('english', '뚱뚱한 고양이가 매트 위에 앉아 있었는데 - 살찐 쥐를 잡아먹었어요');
                  to_ts벡터
----------------------------------------
 'ate':9 'cat':3 'fat':2,11 'mat':7 'rat':12 'sat':4

위의 예에서 우리는 결과를 볼 수 있습니다ts벡터단어를 포함하지 않습니다.a, 켜짐또는그것, 단어되었다및 구두점-무시되었습니다.

to_ts벡터함수는 범퍼카 토토 텍스트를 토큰으로 나누고 각 토큰에 유형을 할당하는 파서를 내부적으로 호출합니다. 각 토큰에 대해 사전 목록(PostgreSQL : 문서 : 9.4 : 배트맨 토토)가 참조되며, 여기서 목록은 토큰 유형에 따라 달라질 수 있습니다. 최초의 사전인식토큰은 하나 이상의 정규화된 토큰을 내보냅니다.어휘토큰을 나타냅니다. 예를 들어,이 되었다사전 중 하나가 다음 단어를 인식했기 때문입니다.은의 복수형입니다. 일부 단어는 다음과 같이 인식됩니다.단어 중지 (섹션 12.6.1), 검색에 유용하기에는 너무 자주 발생하므로 무시됩니다. 우리의 예에서는 다음과 같습니다.a, 켜짐그것. 목록에 토큰을 인식하는 사전이 없으면 토큰도 무시됩니다. 이 예에서는 구두점 기호에 발생했습니다.-사실 토큰 유형에 할당된 사전이 없기 때문입니다(공간 기호), 이는 공간 토큰이 색인화되지 않음을 의미합니다. 파서, 사전의 선택 및 색인화할 토큰 유형은 선택한 텍스트 검색 구성에 따라 결정됩니다(PostgreSQL : 문서 : 9.4 : 토토 꽁 머니 예). 동일한 데이터베이스에 다양한 구성을 가질 수 있으며 사전 정의된 구성을 다양한 언어로 사용할 수 있습니다. 이 예에서는 기본 구성을 사용했습니다.영어영어의 경우.

함수설정중량a의 항목에 라벨을 지정하는 데 사용할 수 있습니다.ts벡터주어진 내용으로무게, 여기서 가중치는 문자 중 하나입니다.A, B, C, 또는D. 이는 일반적으로 제목이나 본문 등 범퍼카 토토의 여러 부분에서 나오는 항목을 표시하는 데 사용됩니다. 나중에 이 정보는 검색 결과 순위에 사용될 수 있습니다.

왜냐하면to_tsVector(NULL)이 반환됩니다.NULL사용을 권장합니다합체필드가 null일 수 있을 때마다. 다음은를 만드는 데 권장되는 방법입니다.ts벡터구조화된 범퍼카 토토에서:

업데이트 tt SET ti =
    setweight(to_tsVector(coalesce(title,'')), 'A') ||
    setweight(to_tsVector(coalesce(keyword,'')), 'B') ||
    setweight(to_tsVector(coalesce(abstract,'')), 'C') ||
    setweight(to_tsVector(coalesce(body,'')), 'D');

여기서 우리는 사용했습니다설정중량완료된 각 어휘의 출처에 라벨을 지정합니다.ts벡터, 그런 다음 라벨이 붙은을 병합했습니다.ts벡터다음을 사용하는 값ts벡터연결 연산자||. (섹션 12.4.1이 작업에 대한 세부정보를 제공합니다.)

12.3.2. 쿼리 구문 분석

PostgreSQL기능을 제공합니다to_tsquery그리고plainto_tsquery쿼리를 다음으로 변환하기 위해tsquery데이터 유형.to_tsquery다음보다 더 많은 기능에 대한 액세스 제공plainto_tsquery, 그러나 입력에 대해서는 덜 관대합니다.

to_tsquery([ 구성 regconfig, ] 쿼리텍스트 텍스트) 반환tsquery

to_tsquery생성tsquery값:쿼리텍스트, 부울 연산자로 구분된 단일 토큰으로 구성되어야 함&(그리고),|(OR) 및!(아닙니다). 이러한 연산자는 괄호를 사용하여 그룹화할 수 있습니다. 즉,에 대한 입력은to_tsquery이미 다음에 대한 일반 규칙을 따라야 합니다.tsquery설명된 대로 입력PostgreSQL : 문서 : 9.4 : 사설 토토 검색 유형. 차이점은 기본이지만tsquery입력은 토큰을 액면 그대로 받아들입니다.to_tsquery지정된 구성 또는 기본 구성을 사용하여 각 토큰을 어휘소로 정규화하고 구성에 따라 불용어인 모든 토큰을 삭제합니다. 예를 들면:

SELECT to_tsquery('english', 'The & Fat & Rats');
  to_tsquery   
---------------
 '뚱뚱하다' & '쥐'

기본과 동일tsquery입력, 가중치를 각 어휘소에 첨부하여 일치만 제한할 수 있습니다.ts벡터해당 가중치의 어휘소입니다. 예를 들면:

SELECT to_tsquery('english', '뚱뚱한 | 쥐:AB');
    to_tsquery    
------------------
 '지방' | '쥐':AB

또한,*접두어 일치를 지정하기 위해 어휘소에 첨부할 수 있습니다.

SELECT to_tsquery('supern:*A & star:A*B');
        to_tsquery        
-------------
 'supern':*A & 'star':*AB

이러한 어휘는 다음의 모든 단어와 일치합니다.ts벡터주어진 문자열로 시작합니다.

to_tsquery또한 작은따옴표 구문을 사용할 수 있습니다. 이는 구성에 해당 문구에 대해 트리거될 수 있는 동의어 사전이 포함된 경우 주로 유용합니다. 아래 예에서 동의어 사전에는 규칙이 포함되어 있습니다.초신성 별: sn:

SELECT to_tsquery('''초신성별'' & !게');
  to_tsquery
---------------
 'sn' & !'게'

따옴표 없이,to_tsqueryAND 또는 OR 연산자로 구분되지 않은 토큰에 대해 구문 오류를 생성합니다.

plainto_tsquery([ 구성 regconfig, ] 쿼리텍스트 텍스트) 반환tsquery

plainto_tsquery서식 없는 텍스트 변환쿼리텍스트tsquery. 텍스트는 다음과 같이 구문 분석되고 정규화됩니다.to_tsVector, 그러면&(AND) 살아남은 단어 사이에 부울 연산자가 삽입됩니다.

예:

SELECT plainto_tsquery('english', 'The Fat Rats');
 plainto_tsquery 
-----------------
 '뚱뚱하다' & '쥐'

참고plainto_tsquery입력에서 부울 연산자, 가중치 레이블 또는 접두사 일치 레이블을 인식할 수 없습니다.

SELECT plainto_tsquery('english', 'The Fat & Rats:C');
   plainto_tsquery   
--------
 '지방' & '쥐' & 'c'

여기서 입력된 구두점은 모두 공백 기호로 간주되어 폐기되었습니다.

12.3.3. 순위 검색 결과

순위는 범퍼카 토토가 특정 검색어와 얼마나 관련성이 있는지 측정하려고 시도하므로 일치하는 항목이 많을 경우 가장 관련성이 높은 항목이 먼저 표시될 수 있습니다.PostgreSQL어휘, 근접성 및 구조적 정보를 고려하는 사전 정의된 두 가지 순위 함수를 제공합니다. 즉, 쿼리 용어가 범퍼카 토토에 얼마나 자주 나타나는지, 용어가 범퍼카 토토에서 얼마나 가까이 있는지, 범퍼카 토토에서 쿼리 용어가 나타나는 부분이 얼마나 중요한지를 고려합니다. 그러나 관련성의 개념은 모호하고 매우 애플리케이션별로 다릅니다. 다양한 애플리케이션에는 순위 지정을 위한 추가 정보(예: 범퍼카 토토 수정 시간)가 필요할 수 있습니다. 내장된 순위 기능은 단지 예시일 뿐입니다. 자신만의 순위 함수를 작성하거나 해당 결과를 특정 요구 사항에 맞게 추가 요소와 결합할 수 있습니다.

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

ts_rank([가중치 float4[], ] 벡터 ts벡터, 질의 tsquery [, 정규화 정수]) 반환float4

일치하는 어휘의 빈도에 따라 벡터의 순위를 매깁니다.

ts_rank_cd([가중치 float4[], ] 벡터 ts벡터, 질의 tsquery [, 정규화 정수]) 반환float4

이 함수는 다음을 계산합니다.피복 밀도주어진 범퍼카 토토 벡터 및 쿼리에 대한 순위. Clarke, Cormack 및 Tudhope의 "Information Process and Management" 저널(1999)에 있는 "Relevance Ranking for One to Three Term Queries"에 설명되어 있습니다. 표지 밀도는 다음과 유사합니다.ts_rank어휘의 서로 일치하는 근접성을 고려한다는 점을 제외하고 순위를 매깁니다.

이 함수는 계산을 수행하기 위해 어휘 위치 정보가 필요합니다. 따라서 모든 것을 무시합니다."벗겨짐"어휘ts벡터. 입력에 제거되지 않은 어휘소가 없으면 결과는 0이 됩니다. (참조섹션 12.4.1에 대한 자세한 내용은스트립함수 및 위치 정보ts벡터s.)

이 두 기능 모두에 대해 선택 사항가중치인수는 레이블이 지정되는 방식에 따라 단어 인스턴스의 가중치를 다소 높게 지정하는 기능을 제공합니다. 가중치 배열은 각 단어 범주의 가중치를 다음 순서대로 지정합니다.

D-가중치, C-가중치, B-가중치, A-가중치

아니면가중치제공된 경우 다음 기본값이 사용됩니다.

{0.1, 0.2, 0.4, 1.0}

일반적으로 가중치는 제목이나 초기 초록과 같은 범퍼카 토토의 특정 영역에 있는 단어를 표시하는 데 사용되므로 범퍼카 토토 본문의 단어보다 다소 중요하게 처리될 수 있습니다.

Since a longer document has a greater chance of containing a query term it is reasonable to take into account document size, e.g., a hundred-word document with five instances of a search word is probably more relevant than a thousand-word document with five instances. Both ranking functions take an integer정규화23280_23477|(예:2|4).

  • 0(기본값)은 범퍼카 토토 길이를 무시합니다.

  • 1 순위를 1 + 범퍼카 토토 길이의 로그로 나눕니다.

  • 2 순위를 범퍼카 토토 길이로 나눕니다.

  • 4 순위를 범위 사이의 평균 고조파 거리로 나눕니다(이는 다음으로만 구현됩니다.ts_rank_cd)

  • 8 순위를 범퍼카 토토의 고유 단어 수로 나눕니다.

  • 16은 순위를 1 + 범퍼카 토토의 고유 단어 수의 로그로 나눕니다.

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

두 개 이상의 플래그 비트가 지정되면 변환은 나열된 순서대로 적용됩니다.

순위 함수는 글로벌 정보를 사용하지 않으므로 때로는 원하는 대로 1% 또는 100%로 공정한 정규화를 생성하는 것이 불가능하다는 점에 유의하는 것이 중요합니다. 정규화 옵션 32 (순위/(순위+1))를 적용하면 모든 순위를 0에서 1 사이의 범위로 조정할 수 있지만 물론 이는 단지 외관상 변경일 뿐입니다. 검색 결과의 순서에는 영향을 미치지 않습니다.

다음은 가장 높은 순위의 일치 항목 10개만 선택하는 예입니다:

제목 선택, ts_rank_cd(텍스트 검색, 쿼리) AS 순위
FROM apod, to_tsquery('neutrino|(dark & Matter)') 쿼리
WHERE 쿼리 @@ 텍스트 검색
순위 DESC로 주문
제한 10;
                     제목 |   순위
-------------------+----------
 태양 속의 중성미자 |      3.1
 Sudbury 중성미자 검출기 |      2.4
 은하계 암흑물질에 대한 마초적인 관점 |  2.01317
 뜨거운 가스와 암흑물질 |  1.91171
 처녀자리 클러스터: 고온 플라즈마 및 암흑 물질 |  1.90953
 태양 중성미자 래프팅 |      1.9
 NGC 4650A: 이상한 은하와 암흑 물질 |  1.85774
 뜨거운 가스와 암흑물질 |   1.6123
 우주 중성미자 얼음낚시 |      1.6
 약한 렌즈 효과는 우주를 왜곡합니다 | 0.818218

이것은 정규화된 순위를 사용한 동일한 예입니다:

SELECT title, ts_rank_cd(textsearch, query, 32 /* 순위/(순위+1) */ ) AS 순위
FROM apod, to_tsquery('neutrino|(dark & Matter)') 쿼리
WHERE 쿼리 @@ 텍스트 검색
순위 DESC로 주문
제한 10;
                     제목 |        순위
---------------------+-------------------
 태양 속의 중성미자 | 0.756097569485493
 Sudbury 중성미자 검출기 | 0.705882361190954
 은하계 암흑물질에 대한 마초적인 관점 | 0.668123210574724
 뜨거운 가스와 암흑물질 |  0.65655958650282
 처녀자리 클러스터: 고온 플라즈마 및 암흑 물질 | 0.656301290640973
 태양 중성미자 래프팅 | 0.655172410958162
 NGC 4650A: 이상한 은하와 암흑 물질 | 0.650072921219637
 뜨거운 가스와 암흑물질 | 0.617195790024749
 우주 중성미자 얼음낚시 | 0.615384618911517
 약한 렌즈 효과는 우주를 왜곡합니다 | 0.450010798361481

순위는 컨설팅이 필요하기 때문에 비용이 많이 들 수 있습니다.ts벡터각 일치하는 범퍼카 토토의 I/O 바인딩되어 속도가 느릴 수 있습니다. 안타깝게도 실제 쿼리로 인해 많은 수의 일치 항목이 나오는 경우가 많기 때문에 이를 피하는 것은 거의 불가능합니다.

12.3.4. 결과 강조

검색 결과를 표시하려면 각 범퍼카 토토의 일부와 그것이 검색어와 어떻게 관련되어 있는지 표시하는 것이 이상적입니다. 일반적으로 검색 엔진은 표시된 검색어와 함께 범퍼카 토토의 일부를 표시합니다.PostgreSQL기능 제공ts_headline이 기능을 구현하는 것입니다.

ts_headline([ 구성 regconfig, ] 범퍼카 토토 텍스트, 질의 tsquery [, 옵션 텍스트 ]) 반환텍스트

ts_headline쿼리와 함께 범퍼카 토토를 수락하고 쿼리의 용어가 강조 표시된 범퍼카 토토에서 발췌한 내용을 반환합니다. 범퍼카 토토를 구문 분석하는 데 사용되는 구성은 다음으로 지정할 수 있습니다.구성; 만일구성생략되었습니다.default_text_search_config구성이 사용됩니다.

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

  • StartSel, StopSel: 범퍼카 토토에 나타나는 쿼리 단어를 구분하여 다른 발췌 단어와 구별하는 문자열입니다. 공백이나 쉼표가 포함된 경우 이러한 문자열을 큰따옴표로 묶어야 합니다.

  • MaxWords, MinWords: 이 숫자는 출력할 가장 긴 헤드라인과 가장 짧은 헤드라인을 결정합니다.

  • 단어: 이 길이 이하의 단어는 헤드라인의 시작과 끝에서 삭제됩니다. 기본값 3은 일반적인 영어 관사를 제거합니다.

  • 하이라이트올: 부울 플래그; 만일앞의 세 매개변수를 무시하고 전체 범퍼카 토토가 헤드라인으로 사용됩니다.

  • MaxFragments: 표시할 텍스트 발췌 또는 조각의 최대 수입니다. 기본값 0은 비조각 지향 헤드라인 생성 방법을 선택합니다. 0보다 큰 값은 조각 기반 헤드라인 생성을 선택합니다. 이 방법은 가능한 한 많은 쿼리 단어가 포함된 텍스트 조각을 찾아 해당 조각을 쿼리 단어 주위로 늘립니다. 결과적으로 쿼리 단어는 각 조각의 중앙에 가깝고 양쪽에 단어가 있습니다. 각 조각은 최대로 구성됩니다.MaxWords그리고 긴 단어단어30161_30309최소단어범퍼카 토토에 표시됩니다.

  • FragmentDelimiter: 둘 이상의 조각이 표시되면 조각은 이 문자열로 구분됩니다.

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

StartSel=<b, StopSel=</b,
MaxWords=35, MinWords=15, ShortWord=3, 하이라이트All=FALSE,
MaxFragments=0, FragmentDelimiter=" ... "

예:

SELECT ts_headline('영어',
  '가장 일반적인 검색 유형
주어진 검색어가 포함된 모든 범퍼카 토토를 찾는 것입니다.
그리고 유사한 순서대로 반환합니다.
쿼리.',
  to_tsquery('쿼리 및 유사성'));
                        ts_headline                         
----------------------------------
 특정 <b검색어</b 용어 포함
 그리고 <b유사성</b 순서대로 반환합니다.
 <b쿼리</b.

SELECT ts_headline('한국어',
  '가장 일반적인 검색 유형
주어진 검색어가 포함된 모든 범퍼카 토토를 찾는 것입니다.
그리고 유사한 순서대로 반환합니다.
쿼리.',
  to_tsquery('쿼리 및 유사성'),
  'StartSel = <, StopSel = ');
                      ts_headline                      
------------------------------------------
 주어진 <query 용어를 포함하는
 <유사성 순서대로 반환합니다.
 <쿼리.

ts_headline다음이 아닌 원본 범퍼카 토토를 사용합니다ts벡터요약이므로 속도가 느릴 수 있으므로 주의해서 사용해야 합니다. 일반적인 실수는 전화하는 것입니다.ts_headlinefor마다범퍼카 토토가 10개만 표시될 때 일치하는 범퍼카 토토입니다.SQL하위 쿼리가 도움이 될 수 있습니다. 여기에 예가 있습니다:

SELECT id, ts_headline(body, q), 순위
FROM (SELECT id, body, q, ts_rank_cd(ti, q) AS 순위
      apod에서, to_tsquery('stars') q
      어디에서 @@q
      순위 DESC로 주문
      제한 10) AS foo;