이 윈 토토는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 토토 커뮤니티 : 17 : 12.1. 소개버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

12.1. 소개

전체 텍스트 검색(또는 그냥텍스트 검색)은 자연어 식별 기능을 제공합니다.윈 토토a를 만족시키는질의, 선택적으로 관련성에 따라 정렬 쿼리에. 가장 일반적인 검색 유형은 모든 항목을 찾는 것입니다. 주어진 윈 토토를 포함하는 윈 토토검색어그리고 순서대로 반환유사성질의에. 의 개념질의그리고유사성있습니다 매우 유연하며 특정 애플리케이션에 따라 달라집니다. 는 가장 간단한 검색이 고려됩니다.질의세트로 단어와유사성주파수로 윈 토토의 검색어 수입니다.

텍스트 검색 연산자는 수년간 데이터베이스에 존재해 왔습니다.PostgreSQL있음~, ~*, 좋아요좋아요연산자 텍스트 데이터 유형의 경우 필수 속성이 많이 부족합니다. 현대 정보 시스템에 필요한 사항:

  • 영어라도 언어 지원이 없습니다. 레귤러 표현이 충분하지 않습니다. 왜냐하면 쉽게 할 수 없기 때문입니다. 파생어 처리(예:만족합니다그리고만족합니다. 다음을 포함하는 윈 토토가 누락될 수 있습니다.만족합니다, 아마도 당신은 검색할 때 찾고 싶습니다.만족합니다. 사용이 가능합니다또는여러 파생 양식을 검색하지만 이는 지루하고 오류가 발생하기 쉽습니다(일부 단어에는 여러 개의 단어가 포함될 수 있음). 천 파생 상품).

  • 검색 결과의 순서(순위)를 제공하지 않습니다. 수천 개가 일치하면 효과가 없게 됩니다. 윈 토토가 발견되었습니다.

  • 색인 지원이 없기 때문에 속도가 느린 경향이 있으므로 검색할 때마다 모든 윈 토토를 처리해야 합니다.

전체 텍스트 색인을 사용하면 윈 토토를 다음과 같이 만들 수 있습니다.전처리됨및 다음에 대해 저장된 색인 나중에 빠른 검색. 전처리에는 다음이 포함됩니다.

  • 윈 토토 구문 분석 중 토큰. 다양한 클래스를 식별하는 데 유용합니다. 토큰(예: 숫자, 단어, 복잡한 단어, 이메일 주소, 다르게 처리될 수 있도록 말이죠. 원칙적으로 토큰 클래스는 특정 애플리케이션에 따라 다르지만 대부분의 경우 목적에 따라 사전 정의된 클래스 세트를 사용하는 것이 적합합니다.PostgreSQL사용파서이 단계를 수행합니다. 표준 파서가 제공되며 사용자 정의 파서를 생성할 수 있습니다. 특정 요구 사항.

  • 토큰을 다음으로 변환 중 어휘. 어휘소는 토큰과 마찬가지로 문자열이지만 됐어요정규화그래서 같은 단어의 다른 형태는 비슷하게 만들어집니다. 예를 들어, 정규화에는 거의 항상 대문자 접기가 포함됩니다. 문자를 소문자로 변환하고 종종 접미사 제거를 포함함 (예:s또는es영어). 이를 통해 검색을 통해 다음을 찾을 수 있습니다. 지루하게 입력하지 않고 동일한 단어의 변형 형태 가능한 모든 변형. 또한 이 단계는 일반적으로 제거하다단어 중지너무 흔해서 검색해도 쓸모가 없는 단어. (간단히 말하면 토큰은 윈 토토의 원시 조각입니다. 어휘는 텍스트에 유용하다고 생각되는 단어입니다. 인덱싱 및 검색.)포스트그레SQL사용사전이 단계를 수행합니다. 다양한 표준 사전이 제공되며, 사용자 정의 사전도 가능합니다. 특정 요구에 맞게 만들어졌습니다.

  • 전처리된 저장 중 검색에 최적화된 윈 토토. 예를 들어, 각각 윈 토토는 정규화된 정렬된 배열로 표현될 수 있습니다. 어휘소. 어휘소와 함께 다음이 바람직할 때가 많습니다. 사용할 위치 정보 저장근접 순위, 따라서 윈 토토는 더 포함되어 있습니다"밀도"지역 쿼리 단어는 분산된 쿼리 단어보다 높은 순위로 할당됩니다. 검색어.

사전을 사용하면 토큰이 어떻게 저장되는지 세밀하게 제어할 수 있습니다. 정규화되었습니다. 적절한 사전을 사용하면 다음을 수행할 수 있습니다.

  • 색인이 생성되어서는 안되는 불용어를 정의하세요.

  • 다음을 사용하여 동의어를 단일 단어로 매핑Ispell.

  • 동의어 사전을 사용하여 구문을 단일 단어로 매핑합니다.

  • 단어의 다양한 변형을 표준 형식으로 매핑 를 사용하여Ispell사전.

  • 단어의 다양한 변형을 표준 형식으로 매핑 사용 중눈덩이스테머 규칙.

데이터 유형ts벡터다음에 제공됩니다. 유형과 함께 전처리된 윈 토토 저장tsquery처리된 쿼리를 나타내기 위해(섹션 8.11). 많은 다음 데이터 유형에 사용할 수 있는 함수 및 연산자(섹션 9.13), 가장 중요한 그 중 일치 연산자가 있습니다@@, 우리는에서 소개합니다섹션 12.1.2. 인덱스를 사용하면 전체 텍스트 검색 속도를 높일 수 있습니다(섹션 12.9).

12.1.1. 무엇입니까? 윈 토토?

A 윈 토토검색 단위입니다 전문 검색 시스템에서; 예를 들어 잡지 기사 또는 이메일 메시지. 텍스트 검색 엔진은 구문 분석이 가능해야 합니다. 어휘소(키워드)의 윈 토토 및 저장 연관 상위 윈 토토. 나중에 이러한 연관은 다음과 같은 용도로 사용됩니다. 검색어가 포함된 윈 토토를 검색합니다.

다음 내에서 검색하는 경우PostgreSQL, 윈 토토는 일반적으로 데이터베이스 테이블 행 내의 텍스트 필드 또는 이러한 필드의 조합(연결)은 아마도 여러 테이블을 사용하거나 동적으로 가져옵니다. 즉, 윈 토토는 인덱싱을 위해 여러 부분으로 구성될 수 있습니다. 전체적으로 어디에도 저장되지 않을 수도 있습니다. 에 대한 예:

제목 선택 || ' ' ||  작성자 || ' ' ||  추상 || ' ' || 본문 AS 윈 토토
메시지에서
어디에서 mid = 12;

SELECT m.제목 || ' ' || m.작가 || ' ' || m.추상 || ' ' || d.body AS 윈 토토
FROM 메시지 m, 윈 토토 d
어디에서 mid = 했나요 AND mid = 12;

참고:사실, 이 예시 쿼리에서는,합체다음에 사용되어야 합니다 단 하나도 방지NULL속성 a를 일으키는 것으로부터NULL에 대한 결과 전체 윈 토토.

또 다른 가능성은 윈 토토를 간단한 텍스트로 저장하는 것입니다 파일 시스템의 파일. 이 경우 데이터베이스는 다음과 같습니다. 전체 텍스트 인덱스를 저장하고 검색을 실행하는 데 사용됩니다. 일부 고유 식별자를 사용하여 윈 토토를 검색할 수 있습니다. 파일 시스템에서. 그러나 외부에서 파일을 검색하는 경우 데이터베이스에 슈퍼유저 권한이나 특수 기능이 필요합니다. 지원하므로 이는 일반적으로 모든 항목을 유지하는 것보다 덜 편리합니다. 내부 데이터PostgreSQL. 또한 모든 것을 데이터베이스 내부에 보관하면 쉽게 액세스할 수 있습니다. 색인 생성 및 표시를 지원하기 위해 메타데이터를 윈 토토화합니다.

텍스트 검색을 위해 각 윈 토토는 다음으로 축소되어야 합니다. 전처리된ts벡터형식. 검색 및 순위 지정은 전적으로에서 수행됩니다.ts벡터윈 토토 표현 — 원본 텍스트는 윈 토토가 완료된 후에만 검색하면 됩니다. 사용자에게 표시하기 위해 선택되었습니다. 그러므로 우리는 종종 다음과 같은 말을 합니다.ts벡터윈 토토로서, 그러나 물론 그것은 전체 내용을 간략하게 표현한 것일 뿐입니다. 윈 토토.

12.1.2. 기본 텍스트 일치

전체 텍스트 검색포스트그레SQL일치 연산자를 기반으로 함@@, 반환if ats벡터(윈 토토)는 a와 일치합니다.tsquery(쿼리). 그것 어떤 데이터 유형이 먼저 기록되는지는 중요하지 않습니다.

SELECT '뚱뚱한 고양이가 매트 위에 앉아 살찐 쥐를 먹었습니다'::tsVector @@ '고양이 & 쥐'::tsquery;
 ?열?
----------
 티

SELECT '뚱뚱하고 소'::tsquery @@ '뚱뚱한 고양이가 매트 위에 앉아 살찐 쥐를 먹었습니다.'::tsVector;
 ?열?
----------
 에프

위의 예에서 알 수 있듯이, atsquery단지 원시 텍스트가 아니라 ats벡터입니다. 갑tsquery검색어가 포함되어 있습니다. 이미 정규화된 어휘소이며 여러 용어를 결합할 수 있습니다. AND, OR, NOT 연산자를 사용합니다. (자세한 내용은 참조섹션 8.11.) 있습니다. 기능to_tsquery그리고plainto_tsquery도움이 됐어요 사용자가 작성한 텍스트를 적절한 텍스트로 변환하는 중tsquery, 예를 들어 나타나는 단어를 정규화하여 텍스트에서. 마찬가지로,to_tsVector는 구문 분석 및 정규화에 사용됩니다. 윈 토토 문자열. 따라서 실제로 텍스트 검색 일치는 다음과 같습니다. 이와 비슷한 것 더 보기:

SELECT to_tsVector('뚱뚱한 고양이가 뚱뚱한 쥐를 먹었습니다') @@ to_tsquery('뚱뚱한 & 쥐');
 ?열? 
----------
 티

다음과 같이 작성하면 이 일치가 성공하지 못할 것임을 관찰하십시오.

SELECT '뚱뚱한 고양이가 뚱뚱한 쥐를 먹었습니다'::tsVector @@ to_tsquery('뚱뚱한 & 쥐');
 ?열? 
----------
 에프

여기에는 단어의 정규화가 없으므로이 발생합니다. a의 요소ts벡터어휘소는 이미 가정된 어휘입니다. 정규화되었으므로일치하지 않음.

@@연산자도 지원합니다텍스트입력, 명시적 변환 허용 텍스트 문자열에서ts벡터또는tsquery간단한 경우에는 건너뜁니다. 사용 가능한 변형은 다음과 같습니다.

ts벡터 @@ tsquery
tsquery @@ ts벡터
텍스트@@tsquery
문자 @@ 문자

이들 중 처음 두 개는 이미 보았습니다. 양식텍스트 @@ tsquery다음과 동일함to_tsVector(x) @@ y. 양식텍스트 @@ 텍스트다음과 동일함to_tsVector(x) @@ plainto_tsquery(y).

12.1.3. 구성

위의 내용은 모두 간단한 텍스트 검색 예입니다. 언급했듯이 이전에는 전체 텍스트 검색 기능에 다음 기능이 포함되었습니다. 더 많은 작업 수행: 특정 단어 색인 생성 건너뛰기(단어 중지) 동의어를 처리하고 정교한 구문 분석(예: 구문 분석)을 사용합니다. 단순한 공백 이상의 것을 기반으로 합니다. 이 기능은 에 의해 제어됨텍스트 검색 구성. PostgreSQL다양한 언어에 대해 사전 정의된 구성이 제공됩니다. 자신만의 구성을 쉽게 만들 수 있습니다. (psql's\dF명령은 사용 가능한 모든 구성을 표시합니다.)

설치하는 동안 적절한 구성이 선택됩니다. 그리고default_text_search_config에 따라 설정됨postgresql.conf. 동일한 텍스트를 사용하는 경우 전체 클러스터에 대한 검색 구성을 사용할 수 있습니다. 가치가 있는postgresql.conf. 사용하려면 클러스터 전체에서 구성이 다르지만 동일함 하나의 데이터베이스 내에서 구성을 사용하려면데이터베이스 변경...설정. 그렇지 않으면 설정할 수 있습니다.default_text_search_config각각 세션.

구성에 따라 달라지는 각 텍스트 검색 기능 선택사항이 있습니다.regconfig인수, 그래서 사용할 구성을 명시적으로 지정할 수 있습니다.default_text_search_config사용됨 이 인수가 생략된 경우에만.

사용자 정의 텍스트 검색을 더 쉽게 구축하기 위해 구성은 더 간단한 구성으로 구성됩니다. 데이터베이스 객체.PostgreSQL의 텍스트 검색 기능은 네 가지 유형의 검색 기능을 제공합니다. 구성 관련 데이터베이스 객체:

  • 텍스트 검색 파서휴식 윈 토토를 토큰으로 분류하고 각 토큰을 분류합니다(예: 단어 또는 숫자로).

  • 텍스트 검색 사전토큰을 정규화된 형식으로 변환하고 중지를 거부합니다. 단어.

  • 텍스트 검색 템플릿제공 사전의 기본 기능. (단순히 사전은 템플릿과 매개변수 세트를 지정합니다. 템플릿.)

  • 텍스트 검색 구성다음에 사용할 파서 및 사전 세트를 선택하세요. 파서가 생성한 토큰을 정규화합니다.

텍스트 검색 파서 및 템플릿은 낮은 수준의 C로 구축되었습니다. 기능; 따라서 이를 위해서는 C 프로그래밍 능력이 필요합니다. 새로운 것을 개발하고 슈퍼유저 권한으로 이를 설치할 수 있습니다. 데이터베이스. (추가 파서 및 템플릿의 예가 있습니다. 에서기여/지역PostgreSQL배포.) 사전과 구성은 단지 매개변수화하고 일부 기본 파서와 템플릿을 함께 연결합니다. 아니요 새 사전을 생성하려면 특별한 권한이 필요합니다. 구성. 사용자 정의 사전 생성의 예 및 구성은 이 장의 뒷부분에 나와 있습니다.