| PostgreSQL 9.1.24 사설 토토 | ||||
|---|---|---|---|---|
| 스포츠 토토 베트맨 : 문서 : 9.1 : 전문 검색 | 위로 | 12장. 전체 텍스트 검색 | PostgreSQL : 문서 : 9.1 : 테이블 및 토토 핫 | |
전체 텍스트 검색(또는 그냥텍스트 검색)은 자연어 식별 기능을 제공합니다.사설 토토a를 만족시키는질의, 선택적으로 관련성에 따라 정렬 쿼리에. 가장 일반적인 검색 유형은 모든 항목을 찾는 것입니다. 주어진 사설 토토를 포함하는 사설 토토검색어그리고 순서대로 반환유사성질의에. 의 개념질의그리고유사성있습니다 매우 유연하며 특정 애플리케이션에 따라 달라집니다. 는 가장 간단한 검색이 고려됩니다.질의세트로 단어와유사성주파수로 사설 토토의 검색어 수입니다.
텍스트 검색 연산자는 수년간 데이터베이스에 존재해 왔습니다.포스트그레SQL있음~, ~*, 좋아요및좋아요연산자 텍스트 데이터 유형의 경우 필수 속성이 많이 부족합니다. 현대 정보 시스템에 필요한 사항:
영어라도 언어 지원이 없습니다. 레귤러 표현이 충분하지 않습니다. 왜냐하면 쉽게 할 수 없기 때문입니다. 파생어 처리(예:만족합니다그리고만족합니다. 다음을 포함하는 사설 토토가 누락될 수 있습니다.만족합니다, 아마도 당신은 검색할 때 찾고 싶습니다.만족합니다. 사용이 가능합니다또는여러 파생 양식을 검색하지만 이는 지루하고 오류가 발생하기 쉽습니다(일부 단어에는 여러 개의 단어가 포함될 수 있음). 천 파생 상품).
검색 결과의 순서(순위)를 제공하지 않습니다. 수천 개가 일치하면 효과가 없게 됩니다. 사설 토토가 발견되었습니다.
색인 지원이 없기 때문에 속도가 느린 경향이 있으므로 검색할 때마다 모든 사설 토토를 처리해야 합니다.
전체 텍스트 색인을 사용하면 사설 토토를 다음과 같이 만들 수 있습니다.전처리됨및 다음에 대해 저장된 색인 나중에 빠른 검색. 전처리에는 다음이 포함됩니다.
사설 토토를 구문 분석하는 중 토큰. 다양한 클래스를 식별하는 데 유용합니다. 토큰(예: 숫자, 단어, 복잡한 단어, 이메일 주소, 다르게 처리될 수 있도록 말이죠. 원칙적으로 토큰 클래스는 특정 애플리케이션에 따라 다르지만 대부분의 경우 목적에 따라 사전 정의된 클래스 세트를 사용하는 것이 적합합니다.포스트그레SQL사용파서이 단계를 수행합니다. 표준 파서가 제공되며 사용자 정의 파서를 생성할 수 있습니다. 특정 요구 사항.
토큰을 다음으로 변환 중 어휘. 어휘소는 토큰과 마찬가지로 문자열이지만 됐어요정규화그래서 같은 단어의 다른 형태는 비슷하게 만들어집니다. 예를 들어, 정규화에는 거의 항상 대문자 접기가 포함됩니다. 문자를 소문자로 변환하고 종종 접미사 제거를 포함함 (예:s또는es영어). 이를 통해 검색을 통해 다음을 찾을 수 있습니다. 지루하게 입력하지 않고 동일한 단어의 변형 형태 가능한 모든 변형. 또한 이 단계는 일반적으로 제거하다단어 중지너무 흔해서 검색해도 쓸모가 없는 단어. (간단히 말하면 토큰은 사설 토토의 원시 조각입니다. 어휘는 텍스트에 유용하다고 생각되는 단어입니다. 인덱싱 및 검색.)PostgreSQL사용사전이 단계를 수행합니다. 다양한 표준 사전이 제공되며, 사용자 정의 사전도 가능합니다. 특정 요구에 맞게 만들어졌습니다.
전처리된 저장 중 검색에 최적화된 사설 토토. 예를 들어, 각각 사설 토토는 정규화된 정렬된 배열로 표현될 수 있습니다. 어휘소. 어휘소와 함께 다음이 바람직할 때가 많습니다. 사용할 위치 정보 저장근접 순위, 따라서 사설 토토는 더 포함되어 있습니다"밀도"지역 쿼리 단어는 분산된 쿼리 단어보다 높은 순위로 할당됩니다. 검색어.
사전을 사용하면 토큰이 어떻게 저장되는지 세밀하게 제어할 수 있습니다. 정규화되었습니다. 적절한 사전을 사용하면 다음을 수행할 수 있습니다.
색인이 생성되어서는 안되는 불용어를 정의하세요.
다음을 사용하여 동의어를 단일 단어로 매핑Ispell.
동의어 사전을 사용하여 구문을 단일 단어로 매핑합니다.
단어의 다양한 변형을 표준 형식으로 매핑 를 사용하여Ispell사전.
단어의 다양한 변형을 표준 형식으로 매핑 사용 중눈덩이스테머 규칙.
데이터 유형ts벡터다음에 제공됩니다. 유형과 함께 전처리된 사설 토토 저장tsquery처리된 쿼리를 나타내기 위해(섹션 8.11). 많은 다음 데이터 유형에 사용할 수 있는 함수 및 연산자(섹션 9.13), 가장 중요한 그 중 일치 연산자가 있습니다@@, 우리는에서 소개합니다섹션 12.1.2. 인덱스를 사용하면 전체 텍스트 검색 속도를 높일 수 있습니다(섹션 12.9).
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벡터사설 토토로서, 그러나 물론 그것은 전체 내용을 간략하게 표현한 것일 뿐입니다. 사설 토토.
전체 텍스트 검색포스트그레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).
위의 내용은 모두 간단한 텍스트 검색 예입니다. 언급했듯이 이전에는 전체 텍스트 검색 기능에 다음 기능이 포함되었습니다. 더 많은 작업 수행: 특정 단어 색인 생성 건너뛰기(단어 중지) 동의어를 처리하고 정교한 구문 분석(예: 구문 분석)을 사용합니다. 단순한 공백 이상의 것을 기반으로 합니다. 이 기능은 에 의해 제어됨텍스트 검색 구성. 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배포.) 사전과 구성은 단지 매개변수화하고 일부 기본 파서와 템플릿을 함께 연결합니다. 아니요 새 사전을 생성하려면 특별한 권한이 필요합니다. 구성. 사용자 정의 사전 생성의 예와 구성은 이 장의 뒷부분에 나와 있습니다.