하위 문자열 검색 수행

전체 토큰 매칭 외에도 Spanner 검색 색인은 하위 문자열 검색을 지원합니다. 이 페이지에서는 Spanner에서 전체 텍스트 검색의 일부로 하위 문자열 검색을 수행하는 방법을 설명합니다.

하위 문자열 검색에는 다음 특성이 있습니다.

  • 대소문자를 구분하지 않고, 대부분의 구두점을 삭제하고, 공백을 정규화합니다.
  • 부분적 CJK 쿼리는 세그먼트가 잘못 나뉘는 경우가 많기 때문에 중국어, 일본어, 한국어(CJK)의 경우 세분화를 수행하지 않습니다.
  • 검색어가 여러 개면 결과에 각 용어의 하위 문자열이 포함되어야 합니다. 예를 들어 'happ momen'"happy moment"는 두 하위 문자열이 모두 텍스트에서 발견되었기 때문에 서로 매칭됩니다. "happy day"와는 매칭되지 않습니다.

예시

저장된 텍스트 하위 문자열 쿼리 일치
Bridge over Troubled Water ridg roub
Bridge over Troubled Water ridg , roub
Bridge over Troubled Water over brid
Bridge over Troubled Water ate bridge
Bridge over Troubled Water Bridge bridge bridge
Bridge over Troubled Water bri trou ter
Bridge over Troubled Water bri dge
Bridge over Troubled Water troubledwater 아니요
Bridge over Troubled Water trubled 아니요

하위 문자열 검색의 경우 다음 DDL 예시에 표시된 것처럼 TOKENLIST 열 정의에서 TOKENIZE_SUBSTRING 함수를 사용합니다.

CREATE TABLE Albums (
  AlbumId STRING(MAX) NOT NULL,
  AlbumTitle STRING(MAX),
  AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);

SQL 쿼리에서 WHERE 절에 SEARCH_SUBSTRING 함수를 사용합니다. 예를 들어 다음 쿼리는 이전 예시에서 생성된 테이블에서 "happy" 타이틀이 포함된 앨범과 매칭됩니다.

SELECT Album
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');

TOKENIZE_SUBSTRING은 각 토큰에 대해 N-그램을 생성하고 이러한 N-그램을 검색 색인에 저장합니다. 생성할 N-그램의 최소 및 최대 길이는 선택적인 인수를 통해 구성됩니다.

하위 문자열 검색 색인은 토큰화로 훨씬 더 많은 토큰이 생성되기 때문에 동일한 데이터에 대해 10~30배 더 많은 스토리지를 전체 텍스트 색인으로 사용합니다. 이는 ngram_size_minngram_size_max 사이의 차이가 커질 때 특히 그렇습니다. 하위 문자열 쿼리는 또한 실행을 위해 더 많은 리소스를 사용합니다.

TOKENIZE_FULLTEXT와 같이 특정 유형의 콘텐츠를 사용하도록 TOKENIZE_SUBSTRING을 구성할 수 있습니다.

기본 하위 문자열 검색 외에도 SEARCH_SUBSTRING은 상대적 검색 모드를 지원합니다. 상대적 검색은 하위 문자열 검색 결과를 미세 조정합니다.

상대적 검색 모드를 사용 설정하려면 TOKENIZE_SUBSTRING relative_search_types 매개변수를 TRUE로 설정합니다.

상대적 검색이 토큰화에 사용 설정되었으면 SEARCH_SUBSTRING이 다음 상대적 검색 유형으로 쿼리를 수행할 수 있습니다.

  • phrase: 연속 하위 문자열 일치

    예시

    저장된 텍스트 하위 문자열 쿼리. 일치
    Bridge over Troubled Water bridge over
    Bridge over Troubled Water Bridge bridge bridge 아니요
    Bridge over Troubled Water brid over 아니요
    Bridge over Troubled Water ridge over trouble
    Bridge over Troubled Water bridge ove troubled 아니요
    Bridge over Troubled Water idge ove
    Bridge over Troubled Water idge , ove
    Bridge over Troubled Water RIDGE OVE
    Bridge over Troubled Water bridge water 아니요
  • value_prefix: 연속 하위 문자열 매칭을 수행하고 이러한 매칭은 값의 처음 위치에서 시작되어야 합니다. 이는 대소문자 및 공백 정규화 문자열에 대한 STARTS_WITH 함수와 개념적으로 비슷합니다.

    예시

    저장된 텍스트 하위 문자열 쿼리 일치
    Bridge over Troubled Water bridge over
    Bridge over Troubled Water bridge , over
    Bridge over Troubled Water ridge over 아니요
    Bridge over Troubled Water troubled water 아니요
  • value_suffix: 연속 하위 문자열 매칭을 수행하고 값 끝에서 매칭을 수행해야 합니다. 이는 대소문자 및 공백 정규화 문자열에 대한 ENDS_WITH 함수와 개념적으로 비슷합니다.

    예시

    저장된 텍스트 하위 문자열 쿼리. 일치
    Bridge over Troubled Water troubled water
    Bridge over Troubled Water troubled ; water
    Bridge over Troubled Water roubled water
    Bridge over Troubled Water troubled wate 아니요
    Bridge over Troubled Water trouble water 아니요
    Bridge over Troubled Water bridge over 아니요
  • word_prefix: value_prefix와 비슷하지만 문자열이 용어 경계(값 경계가 아닌)에서 매칭되어야 합니다.

    예시

    저장된 텍스트 하위 문자열 쿼리 일치
    Bridge over Troubled Water over trouble
    Bridge over Troubled Water Over , trouble
    Bridge over Troubled Water troub water 아니요
    Bridge over Troubled Water over water 아니요
    Bridge over Troubled Water ove troubled 아니요
    Bridge over Troubled Water ver troubled
  • word_suffix: value_suffix와 비슷하지만 문자열이 용어 경계 끝에서 매칭되어야 합니다.

    예시

    저장된 텍스트 하위 문자열 쿼리 일치
    Bridge over Troubled Water ver troubled
    Bridge over Troubled Water over trouble 아니요
    Bridge over Troubled Water over water 아니요
    Bridge over Troubled Water ove troubled 아니요

다음 단계