전체 토큰 매칭 외에도 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_min
과 ngram_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 아니요
다음 단계
- 전체 텍스트 검색어 알아보기
- 검색 결과 순위 지정 방법 알아보기
- 검색결과를 페이지로 나누는 방법 알아보기
- 전체 텍스트 및 비텍스트 쿼리 혼합 방법 알아보기
- 여러 열 검색 방법 알아보기