윈 토토 : 문서 : 9.4 : 윈 토토 | |||
---|---|---|---|
PostgreSQL : 토토 핫 : 9.4 : 소개 | 스포츠 토토 결과 : 문서 : 9.4 : 전문 검색 | 12 장. 전문 검색 | PostgreSQL : 범퍼카 토토 : 9.4 : 텍스트 검색 제어 |
이전 섹션의 예제는 단순한 상수 문자열을 사용하여 전체 텍스트 매칭을 보여주었습니다. 이 섹션은 선택적으로 인덱스를 사용하여 테이블 데이터를 검색하는 방법을 보여줍니다.
색인없이 전체 텍스트 검색을 수행 할 수 있습니다. 인쇄하는 간단한 쿼리제목단어가 포함 된 각 행친구inBody필드 IS :
제목을 선택하십시오 pgweb에서 TO_TSVECTOR ( '영어', 바디) @@ TO_TSQUERY ( 'English', 'Friend');
이것은 또한와 같은 관련 단어를 찾을 것입니다.친구and친절한,이 모든 것이 동일한 정규화 된 lexeme로 축소되므로
위의 쿼리는를 지정합니다.영어구성을 사용하여 문자열을 구문 분석하고 정상화해야합니다. 또는 구성 매개 변수를 생략 할 수 있습니다.
제목을 선택하십시오 pgweb에서 where to_tsvector (body) @@ to_tsquery ( 'friend');
이 쿼리는에 의해 설정된 구성을 사용합니다default_text_search_config.
더 복잡한 예는 포함 된 가장 최근의 문서를 선택하는 것입니다Createand테이블in제목또는Body:
제목을 선택하십시오 pgweb에서 where to_tsvector (title || ''|| body) @@ to_tsquery ( 'Create & Table') Last_mod_date desc로 주문하십시오 제한 10;
명확성을 위해 우리는를 생략했습니다.Coalesce
함수를 포함하는 행을 찾는 데 필요한 함수 호출null두 필드 중 하나에서.
이러한 쿼리는 토토 베이없이 작동하지만 대부분의 애플리케이션은 때때로 임시 검색을 제외 하고이 접근 방식이 너무 느리게 발견됩니다. 텍스트 검색의 실제 사용은 일반적으로 토토 베이 생성이 필요합니다.
우리는 a를 만들 수 있습니다.진index (PostgreSQL : 문서 : 9.4 : 토토 베이 and Gin Index 유형) 텍스트 검색 속도를 높이려면 :
gin (to_tsvector ( 'English', Body));를 사용하여 pgweb에서 pgweb_idx 생성 pgweb_idx 생성
2의 2- 연기 버전에 주목하십시오.to_tsvector
사용됩니다. 구성 이름을 지정하는 텍스트 검색 기능 만 표현식 토토 베이에서 사용할 수 있습니다 (PostgreSQL : 문서 : 9.4 : 토토 꽁 머니식 색인). 토토 베이 내용은의 영향을받지 않아야하기 때문입니다.default_text_search_config. 영향을받은 경우 다른 항목에 포함될 수 있기 때문에 색인 내용이 일치하지 않을 수 있습니다.TSVECTORS는 다른 텍스트 검색 구성으로 생성되었으며 어느 쪽인지 추측 할 방법이 없습니다. 그러한 색인을 올바르게 덤프하고 복원하는 것은 불가능합니다.
|to_tsvector
위의 토토 베이에 사용되었으며, 2- 연락 버전을 사용하는 쿼리 참조 만to_tsvector
동일한 구성 이름을 사용하면 해당 토토 베이를 사용합니다. 즉,where to_tsvector ( 'English', Body) @@ 'a & b'색인을 사용할 수 있지만WHERE TO_TSVECTOR (BODY) @@ 'A & B'할 수 없습니다. 이렇게하면 토토 베이 항목을 생성하는 데 사용되는 동일한 구성으로 만 토토 베이가 사용됩니다.
구성 이름이 다른 열로 지정되는 더 복잡한 표현식 토토 베이를 설정할 수 있습니다 (예 :.
gin을 사용하여 pgweb에서 인덱스 pgweb_idx 생성 (to_tsvector (config_name, body));
여기서config_name의 열입니다.pgweb테이블. 이를 통해 각 인덱스 항목에 사용 된 구성을 기록하면서 동일한 인덱스에서 혼합 구성이 가능합니다. 예를 들어, 문서 컬렉션에 다른 언어로 문서가 포함 된 경우에 유용합니다. 다시, 인덱스를 사용하기위한 쿼리는 일치하도록 표현되어야합니다 (예 :where to_tsvector (config_name, body) @@ 'a & b'.
토토 베이는 열을 연결할 수 있습니다 :
gin을 사용하여 pgweb에서 인덱스 pgweb_idx 생성
또 다른 접근 방식은 별도를 만드는 것입니다TSVECTOR열의 출력을 유지하려면 열to_tsvector
. 이 예제는의 연결입니다.제목andBody, 사용Coalesce
한 필드가 여전히 색인되도록하려면null:
ALTER TABLE PGWEEB 열 추가 텍스트 검색 가능한_index_col tsvector; pgweb set textsearchable_index_col = 업데이트 to_tsvector ( '영어', Coalesce (title, '') || ''|| Coalesce (Body, '');
그러면 우리는 a를 만듭니다.진검색 속도를 높이는 색인 :
gin (textsearchable_index_col)을 사용하여 pgweb에서 index textsearch_idx 만들기;
이제 빠른 전체 텍스트 검색을 수행 할 준비가되었습니다 :
제목을 선택하십시오 pgweb에서 여기서 textsearchable_index_col @@ to_tsquery ( 'Create & Table') Last_mod_date desc로 주문하십시오 제한 10;
별도의 열을 사용하여 저장할 때tsvector표현,를 유지하려면 트리거를 만들어야합니다TSVECTOR언제든지 열 전류제목또는Body변경.섹션 12.4.3그렇게하는 방법을 설명합니다.
표현식 토토 베이에 대한 별도의 열 접근법의 한 가지 장점은 토토 베이를 사용하기 위해 쿼리의 텍스트 검색 구성을 명시 적으로 지정할 필요가 없다는 것입니다. 위의 예에서 볼 수 있듯이 쿼리는에 의존 할 수 있습니다.default_text_search_config. 또 다른 장점은 검색이 더 빨라질 것이라는 점입니다.to_tsvector
토토 베이 일치를 확인하기위한 호출. (이것은 GIN 지수보다 GIST 지수를 사용할 때 더 중요합니다. 참조PostgreSQL : 문서 : 9.4 : 토토 베이 and Gin Index 유형.) Expression-Index 접근법은 설정하기가 더 간단하지만 이후로 디스크 공간이 적습니다.TSVECTOR표현은 명시 적으로 저장되지 않았습니다.