| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 스포츠 토토 : 9.3 : 소개 | 사설 토토 : 문서 : 9.3 : 전문 검색 | 12장. 전체 텍스트 검색 | PostgreSQL : 스포츠 토토 결과 : 9.3 : 텍스트 검색 제어 | |
이전 섹션의 예에서는 전체 텍스트를 설명했습니다. 간단한 상수 문자열을 사용하여 일치합니다. 이 섹션에서는 다음 방법을 보여줍니다. 선택적으로 색인을 사용하여 테이블 데이터를 검색합니다.
색인 없이 전체 텍스트 검색을 수행할 수 있습니다. 에이 를 인쇄하는 간단한 쿼리제목9880_9918친구그 안에몸필드는 다음과 같습니다:
제목 선택
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
10개 제한;
명확하게 하기 위해 다음을 생략했습니다.합체다음에 필요한 함수 호출
다음을 포함하는 행 찾기NULL다음 중 하나에서
필드 2개.
이러한 쿼리는 색인 없이도 작동하지만 대부분 응용 프로그램에서는 이 접근 방식이 너무 느리다는 것을 알게 될 것입니다. 가끔 임시 검색. 일반적으로 텍스트 검색의 실제 사용 색인을 생성해야 합니다.
우리는 만들 수 있습니다진색인 (섹션 12.9) 속도를 높이려면 텍스트 검색:
gin(to_tsVector('english', body))을 사용하여 pgweb에서 pgweb_idx 인덱스 생성;
다음의 2인수 버전에 주목하세요.to_ts벡터이 사용됩니다. 텍스트 검색 기능만 제공
구성 이름을 지정하는 것은 표현식 인덱스에서 사용될 수 있습니다.
(토토 캔 : 문서 : 9.3 : 표현식 색인). 이것은
인덱스 내용은 다음의 영향을 받지 않아야 하기 때문입니다.default_text_search_config.
영향을 받은 경우 인덱스 내용이 일치하지 않을 수 있습니다.
다른 항목에는 다음이 포함될 수 있기 때문입니다.ts벡터12529_12713
다음의 두 인수 버전 때문에to_tsVector위의 색인에서 사용되었습니다.
2개의 인수 버전을 사용하는 쿼리 참조to_ts벡터동일한 구성 이름을 사용하면
해당 토토 핫를 사용하세요. 즉,어디
to_tsVector('english', body) @@ 'a & b'색인을 사용할 수 있습니다.
하지만어디에서 to_tsVector(body) @@ 'a & b'할 수 없습니다. 이렇게 하면 인덱스가 동일한 경우에만 사용됩니다.
색인 항목을 생성하는 데 사용되는 구성입니다.
더 복잡한 표현식 색인을 설정할 수 있습니다. 구성 이름은 다른 열로 지정됩니다. 예:
gin(to_tsVector(config_name, body))을 사용하여 pgweb에서 pgweb_idx 인덱스 생성;
어디에서config_name은의 열입니다.pgweb테이블. 이는 혼합을 허용합니다. 기록하는 동안 동일한 인덱스의 구성 구성은 각 색인 항목에 사용되었습니다. 이것은 유용할 것입니다. 예를 들어, 문서 컬렉션에 다음 문서가 포함된 경우 다른 언어. 다시 말하지만, 인덱스를 사용하려는 쿼리는 일치하는 문구를 사용해야 합니다(예:어디 to_tsVector(config_name, body) @@ 'a & b'.
색인은 열을 연결할 수도 있습니다:
gin(to_tsVector('english', title || ' ' || body)))을 사용하여 pgweb에서 pgweb_idx 인덱스 생성;
또 다른 접근 방식은 별도의 계정을 생성하는 것입니다.ts벡터출력을 저장할 열to_ts벡터. 이 예는 다음을 연결한 것입니다.제목그리고몸,
사용 중합체그것을 보장하기 위해
다른 필드가 인덱싱될 때 필드는 계속 인덱싱됩니다.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
10개 제한;
별도의 열을 사용하여 저장하는 경우ts벡터표현을 생성하려면 를 유지하기 위한 트리거ts벡터열 현재 언제든지제목또는몸변경사항.섹션 12.4.3그 방법을 설명합니다.
표현식에 비해 별도의 열 접근 방식의 한 가지 장점
인덱스는 텍스트를 명시적으로 지정할 필요가 없다는 것입니다.
인덱스를 활용하려면 쿼리에서 검색 구성을 사용하세요.
위의 예에서 볼 수 있듯이 쿼리는 다음에 따라 달라질 수 있습니다.default_text_search_config. 또 다른 장점은
그럴 필요가 없기 때문에 검색이 더 빨라질 것입니다.
다시 실행하세요to_tsVector확인을 위한 호출
토토 핫가 일치합니다. (이것은 GiST 토토 핫를 사용할 때보다 더 중요합니다.
GIN 지수; 참조PostgreSQL : 문서 : 9.3 : 토토 사이트 추천 and Gin Index 유형.) 표현식 인덱스 접근 방식은 설정이 더 간단합니다.
그러나 다음과 같이 디스크 공간이 더 적게 필요합니다.ts벡터표현이 명시적으로 저장되지 않았습니다.
| 이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
| 소개 | 위로 | 텍스트 제어 검색 |