이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 12.2. 테이블 및 토토 결과버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

12.2. 테이블 및 범퍼카 토토

이전 섹션의 예에서는 전체 텍스트를 설명했습니다. 간단한 상수 문자열을 사용하여 일치합니다. 이 섹션에서는 다음 방법을 보여줍니다. 선택적으로 색인을 사용하여 테이블 데이터를 검색합니다.

12.2.1. 테이블 검색

색인 없이 전체 텍스트 검색이 가능합니다. 에이 를 인쇄하는 간단한 쿼리제목중 단어가 포함된 각 행친구그 안에본체필드는 다음과 같습니다:

제목 선택
pgweb에서
WHERE to_tsVector('english', body) @@ to_tsquery('english', 'friend');

다음과 같은 관련 단어도 찾습니다.친구그리고친절한, 왜냐하면 이 모든 것이 동일한 정규화된 어휘로 축소되기 때문입니다.

위 쿼리는 다음을 지정합니다.영어구성은 구문 분석에 사용되며 문자열을 정규화합니다. 대안으로 우리는 구성 매개변수:

제목 선택
pgweb에서
어디에서 to_tsVector(body) @@ to_tsquery('friend');

이 쿼리는 다음에 의해 설정된 구성을 사용합니다.default_text_search_config.

더 복잡한 예는 가장 최근의 10개를 선택하는 것입니다. 다음을 포함하는 문서생성그리고테이블에서제목또는본체:

제목 선택
pgweb에서
WHERE to_tsVector(title || ' ' || body) @@ to_tsquery('create & table')
ORDER BY last_mod_date DESC LIMIT 10;

명확하게 하기 위해 다음을 생략했습니다.합체필요한 함수 호출 다음을 포함하는 행을 찾으려면NULL하나로 두 필드 중 하나입니다.

이러한 쿼리는 색인 없이도 작동하지만 대부분 응용 프로그램에서는 이 접근 방식이 너무 느리다는 것을 알게 될 것입니다. 가끔 임시 검색을 위해. 텍스트 검색의 실제 활용 일반적으로 색인을 생성해야 합니다.

12.2.2. 인덱스 생성

우리는 만들 수 있습니다색인 (섹션 12.9) 속도 향상 텍스트 검색까지:

gin(to_tsVector('english', body))을 사용하여 pgweb에서 pgweb_idx 인덱스 생성;

다음의 2인수 버전에 주목하세요.to_ts벡터이 사용됩니다. 텍스트 검색만 가능 구성 이름을 지정하는 함수는 다음에서 사용할 수 있습니다. 표현식 인덱스(토토 사이트 순위 PostgreSQL). 이는 인덱스 내용이 다음과 같아야 하기 때문입니다. 영향을 받지 않음default_text_search_config. 영향을 받은 경우 인덱스 내용이 일치하지 않을 수 있습니다. 다른 항목에는 다음이 포함될 수 있기 때문입니다.ts벡터12863_13059

다음의 두 인수 버전 때문에to_tsVector위의 색인에서만 사용되었습니다. 의 2인수 버전을 사용하는 쿼리 참조to_ts벡터동일 구성 이름은 해당 범퍼카 토토를 사용합니다. 즉,어디에서 to_tsVector('english', body) @@ 'a & 비'색인을 사용할 수 있지만어디 to_tsVector(body) @@ 'a & b'할 수 없습니다. 이는 다음을 보장합니다. 인덱스는 다음과 같은 구성으로만 사용됩니다. 색인 항목을 만듭니다.

더 복잡한 표현식 색인을 설정할 수 있습니다 여기서 구성 이름은 다른 열에 의해 지정됩니다. 예:

gin(to_tsVector(config_name, body))을 사용하여 pgweb에서 pgweb_idx 인덱스 생성;

어디에서config_name다음 열입니다.pgweb테이블. 이는 혼합을 허용합니다. 기록하는 동안 동일한 인덱스의 구성 구성은 각 색인 항목에 사용되었습니다. 이것은 예를 들어 문서 컬렉션에 다음이 포함된 경우 유용합니다. 다양한 언어로 된 문서. 다시 말하지만, 색인을 사용하려면 일치하는 문구를 사용해야 합니다. 예:어디에서 to_tsVector(config_name, body) @@ 'a & 비'.

색인은 열을 연결할 수도 있습니다:

gin(to_tsVector('english', title || ' ' || body)))을 사용하여 pgweb에서 pgweb_idx 인덱스 생성;

또 다른 접근 방식은 별도의 계정을 생성하는 것입니다.ts벡터출력을 저장할 열to_tsVector. 이 예는 연결입니다. 의제목그리고, 사용합체한 필드가 여전히 유지되도록 하기 위해 다른 하나가 인덱싱될 때 색인 생성됨NULL:

ALTER TABLE pgweb ADD COLUMN textsearchable_index_col tsVector;
업데이트 pgweb SET textsearchable_index_col =
     to_tsVector('english', coalesce(title,'') || ' ' || coalesce(body,''));

그런 다음 우리는 다음을 만듭니다검색 속도를 높이는 색인:

gin(textsearchable_index_col)을 사용하여 pgweb에서 textsearch_idx 인덱스 생성;

이제 빠른 전체 텍스트 검색을 수행할 준비가 되었습니다.

제목 선택
pgweb에서
WHERE textsearchable_index_col @@ to_tsquery('생성 및 테이블')
ORDER BY last_mod_date DESC LIMIT 10;

별도의 열을 사용하여 저장하는 경우ts벡터표현을 생성하려면 다음이 필요합니다. 를 유지하는 트리거ts벡터열 언제든지 현재제목또는변경사항.섹션 12.4.3그 방법을 설명합니다.

개별 열 접근 방식의 한 가지 장점은 표현식 인덱스는 명시적으로 필요하지 않다는 것입니다. 쿼리에 텍스트 검색 구성을 지정하려면 인덱스를 활용해보세요. 위의 예에서 볼 수 있듯이 쿼리는 의존할 수 있다default_text_search_config. 또 다른 장점은 그럴 필요가 없기 때문에 검색이 더 빨라질 것입니다. 다시 실행하세요to_tsVector호출 범퍼카 토토 일치를 확인합니다. (이것은 GiST를 사용할 때 더 중요합니다. GIN 지수보다 지수; 참조섹션 12.9.) 그러나 표현 범퍼카 토토 접근 방식은 설정이 더 간단하며 이후 더 적은 디스크 공간이 필요합니다.ts벡터표현이 저장되지 않았습니다. 명시적으로.