이 페이지에서는 전체 텍스트 및 비텍스트 데이터가 혼합된 검색을 수행하는 방법을 설명합니다.
전체 텍스트 및 비텍스트 검색 수행
검색 색인은 전체 텍스트, 일치검색, 숫자 열을 지원합니다. 다중 열 검색 쿼리와 마찬가지로 WHERE
절에서 텍스트 및 비텍스트 조건을 조합할 수 있습니다. 쿼리 옵티마이저는 검색 색인을 사용해서 비텍스트 조건자를 최적화하려고 시도합니다. 이것이 불가능하면 Spanner가 검색 색인과 일치하는 모든 행에 대해 조건을 평가합니다. 검색 색인에 저장되지 않은 참조 열은 기본 테이블에서 가져옵니다.
예를 들어 다음 예시를 살펴보세요.
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
Title STRING(MAX),
Rating FLOAT64,
Genres ARRAY<STRING(MAX)>,
Likes INT64,
Cover BYTES(MAX),
Title_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(Title)) HIDDEN,
Rating_Tokens TOKENLIST AS (TOKENIZE_NUMBER(Rating)) HIDDEN,
Genres_Tokens TOKENLIST AS (TOKEN(Genres)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsIndex
ON Albums(Title_Tokens, Rating_Tokens, Genres_Tokens)
STORING Likes;
이 테이블의 쿼리 동작에는 다음이 포함됩니다.
Rating
및Genres
가 검색 색인에 포함됩니다. Spanner가 검색 색인 게시 목록을 사용하여 조건을 가속화합니다.SELECT Album FROM Albums WHERE Rating > 4 AND ARRAY_INCLUDES_ANY(Genres, ['jazz'])
쿼리는 전체 텍스트 및 비텍스트 조건자 혼합을 포함하여 어떤 방식으로든 결합, 분리, 부정을 조합할 수 있습니다. 이 쿼리는 검색 색인에 의해 완전히 가속됩니다.
SELECT Album FROM Albums WHERE (SEARCH(Title_Tokens, 'car') OR Rating > 4) AND NOT ARRAY_INCLUDES_ANY(Genres, ['jazz'])
Likes
는 색인에 저장되지만 스키마에 따라 Spanner에서 가능한 값에 대한 토큰 색인 빌드가 요청되지 않습니다. 따라서Title
의 전체 텍스트 조건자와Rating
의 비텍스트 조건자가 가속화되지만Likes
의 조건자는 가속화되지 않습니다. Spanner에서 쿼리는Title
에 "car"가 있고 평점이 4보다 높은 모든 문서를 가져온 후 좋아요가 1,000개 미만인 문서를 필터링합니다. 거의 모든 앨범의 제목에 "car"가 있고 거의 대부분 평점이 5이지만 좋아요가 1,000개 있는 앨범이 많지 않으면 이 쿼리에 많은 리소스가 사용됩니다. 이러한 경우Rating
과 비슷하게Likes
를 색인 생성하면 리소스가 절약됩니다.SELECT Album FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND Rating > 4 AND Likes >= 1000
Cover
는 색인에 저장되지 않습니다. 다음 쿼리는AlbumsIndex
와Albums
사이에 백 조인을 수행하여 모든 일치하는 앨범의Cover
를 가져옵니다.SELECT AlbumId, Cover FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND Rating > 4
다음 단계
- 전체 텍스트 검색어 알아보기
- 검색 결과 순위 지정 방법 알아보기
- 하위 문자열 검색 수행 방법 알아보기
- 검색 결과 페이지 매김 방법 알아보기
- 여러 열 검색 방법 알아보기