롤 토토 : 문서 : 9.5 : 롤 토토 9 | |||
---|---|---|---|
토토 사이트 추천 : 문서 : 9.5 : 전문 검색 | 토토 사이트 추천 : 문서 : 9.5 : 전문 검색 | 12 장. 전문 검색 | PostgreSQL : 문서 : 9.5 : 테이블 및 토토 캔 |
전체 텍스트 검색 (또는 Just텍스트 검색) 자연 언어를 식별하는 능력을 제공합니다토토 베이만족쿼리, 그리고 선택적으로 쿼리와 관련하여 정렬합니다. 가장 일반적인 검색 유형은 주어진 모든 토토 베이를 찾는 것입니다쿼리 용어순서대로 반환유사성쿼리에. 개념쿼리and유사성는 매우 유연하며 특정 응용 프로그램에 따라 다릅니다. 가장 간단한 검색은쿼리단어 세트와유사성토토 베이의 쿼리 단어의 빈도로.
텍스트 검색 연산자는 수년간 데이터베이스에 존재했습니다.PostgreSQLhas~, ~*, Like및ilike텍스트 데이터 유형의 운영자이지만 현대 정보 시스템에 필요한 많은 필수 속성이 부족합니다.
영어조차도 언어 적 지원이 없습니다. 정규 표현은 파생 된 단어 (예 :를 쉽게 처리 할 수 없기 때문에 충분하지 않습니다.만족and만족. 포함 된 토토 베이를 놓칠 수 있습니다만족, 당신은 아마도 검색 할 때 그들을 찾고 싶지만만족. 사용할 수 있습니다또는여러 파생 양식을 검색하려면 지루하고 오류가 발생하기 쉽습니다 (일부 단어는 수천 개의 파생물을 가질 수 있습니다).
검색 결과의 주문 (순위)을 제공하지 않으므로 수천 개의 일치하는 토토 베이가 발견 될 때 효과가 없습니다.
색인 지원이 없기 때문에 느리게하는 경향이 있으므로 모든 검색에 대해 모든 토토 베이를 처리해야합니다.
전체 텍스트 인덱싱 토토 베이가 될 수 있습니다전처리그리고 나중에 빠른 검색을 위해 저장된 색인. 전처리 포함 :
토토 베이를 토큰으로 구문 분석. 예를 들어 숫자, 단어, 복잡한 단어, 이메일 주소와 같은 다양한 클래스의 토큰을 식별하여 다르게 처리 할 수 있습니다.PostgreSQLa 사용Parser이 단계를 수행하려면. 표준 파서가 제공되며 특정 요구를 위해 맞춤형 파서를 만들 수 있습니다.
토큰을 Lexemes로 변환. Lexeme은 토큰처럼 끈이지만정규화같은 단어의 다른 형태가 비슷하게 만들어집니다. 예를 들어, 정규화는 거의 항상 항상 하위 신호한 문자를 접는 것이 포함되며 종종 접미사 제거를 포함합니다 (예 :s또는es영어). 이를 통해 검색은 가능한 모든 변형을 지식으로 입력하지 않고도 동일한 단어의 변형 형식을 찾을 수 있습니다.단어 중지,이 단어는 너무 흔한 단어로 검색에 쓸모가 없습니다. (요컨대, 토큰은 토토 베이 텍스트의 원시 조각이며, Lexemes는 색인 및 검색에 유용한 단어입니다.)PostgreSQL용도사전이 단계를 수행하려면. 다양한 표준 사전이 제공되며 특정 요구에 맞는 맞춤형 사전을 만들 수 있습니다.
검색에 최적화 된 전처리 토토 베이 저장. 예를 들어, 각 토토 베이는 정규화 된 Lexemes의 정렬 된 배열로 표시 될 수 있습니다.근접 순위, 더 많은 것을 포함하는 토토 베이"밀도"쿼리 단어의 영역은 쿼리 단어가 흩어져있는 것보다 높은 순위가 할당됩니다.
사전은 토큰이 정규화되는 방법에 대한 세밀한 제어를 허용합니다. 적절한 사전을 사용하면 다음과 같이 할 수 있습니다.
색인을 작성해서는 안되는 중지 단어 정의.
동의어를 단일 단어로 맵핑하여Ispell.
동의어 사전을 사용하여 단일 단어에 대한 문구를 맵핑하십시오.
an을 사용하여 단어의 다른 변형을 표준 형태로 매핑합니다Ispell사전.
단어의 다른 변형을 사용하여 표준 형태로 매핑SnowballStemmer Rules.
데이터 유형tsvector유형과 함께 전처리 토토 베이를 저장할 수 있습니다tsquery처리 된 쿼리를 나타내는 경우 (섹션 8.11). 이러한 데이터 유형에 사용할 수있는 많은 기능과 연산자가 있습니다 (섹션 9.13), 가장 중요한 것은 매치 연산자입니다@@, 우리가 소개하는섹션 12.1.2. 인덱스를 사용하여 전체 텍스트 검색을 가속화 할 수 있습니다 (섹션 12.9).
A 토토 베이전체 텍스트 검색 시스템에서 검색 단위입니다. 예를 들어, 잡지 기사 또는 이메일 메시지.
내 검색의 경우PostgreSQL, 토토 베이는 일반적으로 데이터베이스 테이블 행 내의 텍스트 필드 또는 아마도 여러 테이블에 저장되거나 동적으로 얻은 해당 필드의 조합 (연결)입니다. 다시 말해, 토토 베이는 인덱싱을 위해 다른 부품에서 구성 될 수 있으며 전체적으로 어디서나 저장되지 않을 수 있습니다.
제목을 선택하십시오 || | M.Author ||||
참고 :실제로,이 예제에서 쿼리
Coalesce
단일을 방지하는 데 사용해야합니다nulla를 일으키는 속성null전체 토토 베이의 결과.
또 다른 가능성은 토토 베이를 파일 시스템에 간단한 텍스트 파일로 저장하는 것입니다. 이 경우 데이터베이스는 전문가 인덱스를 저장하고 검색을 실행하는 데 사용될 수 있으며 일부 고유 식별자를 사용하여 파일 시스템에서 토토 베이를 검색 할 수 있습니다.PostgreSQL. 또한 데이터베이스 내부에 모든 것을 유지하면 토토 베이 메타 데이터에 쉽게 액세스 할 수있어 인덱싱 및 디스플레이를 지원합니다.
텍스트 검색 목적의 경우 각 토토 베이를 전처리로 줄여야합니다tsvector형식. 검색 및 순위는 전적으로에서 수행됩니다.tsvector토토 베이 표현 - 원본 텍스트는 사용자에게 표시하도록 토토 베이를 선택한 경우에만 검색해야합니다. 그러므로 우리는 종종에 대해 이야기합니다.tsvector토토 베이로서, 물론 전체 토토 베이의 작품 일뿐입니다.
전체 텍스트 검색에서PostgreSQL매치 연산자를 기반으로@@, 반환trueif atsvector(토토 베이) 일치 atsquery(쿼리). 어떤 데이터 유형이 먼저 기록되었는지는 중요하지 않습니다.
'뚱뚱한 고양이가 매트에 앉아 뚱뚱한 쥐를 먹었습니다':: tsvector @@ 'cat & rat':: tsquery;
위의 예에서 알 수 있듯이 Atsquery단순한 텍스트가 아니라tsvectorIS. 에이tsquery는 이미 정규화 된 Lexemes 여야하는 검색어를 포함하며 운영자가 아닌 OR을 사용하여 여러 용어를 결합 할 수 있습니다. (자세한 내용은 참조섹션 8.11.) 기능이 있습니다to_tsquery
andPlainto_tsquery
사용자가 작성한 텍스트를 적절한 것으로 변환하는 데 도움이되는tsquery, 예를 들어 텍스트에 나타나는 단어를 정규화하여. 비슷하게,to_tsvector
문자열을 구문 분석하고 정규화하는 데 사용됩니다. 실제로 텍스트 검색 경기는 다음과 같습니다.
select to_tsvector ( 'Fat Cats Ate Fat Rats') @@ to_tsquery ( 'fat & rat');
|
'지방 고양이는 지방 쥐를 먹었다':: tsvector @@ to_tsquery ( 'fat & rat');
여기서 단어의 정규화가 없으므로쥐발생합니다. A의 요소tsvectorLexemes는 이미 정규화되었다고 가정하므로쥐일치하지 않습니다rat.
the@@운영자도 지원텍스트입력, 텍스트 문자열을 명시 적으로 변환 할 수 있습니다tsvector또는tsquery간단한 경우에 건너 뜁니다. 사용 가능한 변형은 다음과 같습니다.
tsvector @@ tsquery
우리가 이미 본 첫 번째 두 가지. 양식텍스트 @@ tsqueryto_tsvector (x) @@ y. 양식텍스트 @@ 텍스트to_tsvector (x) @@ plainto_tsquery (y).
위의 모든 간단한 텍스트 검색 예제입니다. 앞에서 언급했듯이 전문 검색 기능에는 더 많은 작업을 수행 할 수있는 기능이 포함됩니다. 특정 단어를 인덱싱하는 (단어 중지), 동의어를 처리하며, 예를 들어 공백 이상을 기준으로 구문 분석 (예 : 정교한 구문 분석)을 사용합니다.텍스트 검색 구성. PostgreSQL많은 언어에 대한 사전 정의 된 구성이 제공되며 자신의 구성을 쉽게 만들 수 있습니다. (PSQL's\ df명령이 사용 가능한 모든 구성을 표시합니다.)
설치 중에 적절한 구성이 선택되고default_text_search_config그에 따라 설정됩니다es. 전체 클러스터에 동일한 텍스트 검색 구성을 사용하는 경우 값을 사용할 수 있습니다.es. 클러스터 전체에 다른 구성을 사용하지만 하나의 데이터베이스 내에서 동일한 구성을 사용하려면 사용데이터베이스 변경 ... 세트. 그렇지 않으면 설정할 수 있습니다default_text_search_config각 세션에서.
구성에 의존하는 각 텍스트 검색 함수는 선택 사항이 있습니다RegConfig인수, 사용 구성을 명시 적으로 지정할 수 있도록default_text_search_config이 인수가 생략 될 때만 사용됩니다.
사용자 정의 텍스트 검색 구성을보다 쉽게 빌드 할 수 있도록 간단한 데이터베이스 개체에서 구성이 구성됩니다..PostgreSQL의 텍스트 검색 기능은 구성 관련 데이터베이스 객체의 네 가지 유형을 제공합니다.
텍스트 검색 파서토토 베이를 토큰으로 나누고 각 토큰을 분류합니다 (예 : 단어 또는 숫자)
텍스트 검색 사전토큰을 정규화 된 양식으로 변환하고 중지 단어를 거부하십시오.
텍스트 검색 템플릿사전 기본 기능을 제공합니다. (사전은 단순히 템플릿의 템플릿과 매개 변수 세트를 지정합니다.)
텍스트 검색 구성파서에서 생성 한 토큰을 정상화하는 데 사용할 구식 사전 및 사전 세트를 선택합니다.
텍스트 검색 파서 및 템플릿은 저수준 C 함수로 구축됩니다. 따라서 새로운 프로그램을 개발할 수있는 C 프로그래밍 능력과 슈퍼 사용자 권한이 데이터베이스에 설치할 수 있어야합니다.Contrib/영역PostgreSQL분포.) 사전 및 구성이 일부 기본 파서와 템플릿을 매개 변수화하고 연결하기 때문에 새로운 사전 또는 구성을 만들기 위해 특별한 권한이 필요하지 않습니다. 이 장의 뒷부분에서 맞춤형 사전 및 구성을 만드는 예가 나타납니다.