이 페이지에서는 전체 텍스트 검색의 정의와 작동 방식을 설명합니다.
개요
전체 텍스트 검색을 사용하면 구조화된 필드에서 정확한 일치를 검색하는 대신 테이블을 검색하여 단어, 구문 또는 숫자를 찾을 수 있는 애플리케이션을 빌드할 수 있습니다. 전체 텍스트 검색은 트랜잭션에 일관성이 있는 최근에 커밋된 데이터를 애플리케이션에 반환합니다. Spanner 전체 텍스트 검색 기능에는 맞춤법 교정, 검색 입력의 언어 감지 자동화, 검색 결과 순위 지정이 포함됩니다. Spanner는 추가 구성 없이 대략적인 단어 일치를 포함하도록 텍스트 검색을 자동으로 확장합니다.
전체 텍스트 검색에 사용할 열에 검색 색인을 만들어야 합니다. Spanner는 이러한 열의 데이터를 분석하여 검색 색인에 추가할 개별 단어를 식별합니다. Spanner는 데이터베이스에 데이터가 커밋되는 즉시 새 데이터 또는 수정된 데이터로 검색 색인을 업데이트합니다.
전체 텍스트 검색 유형
- 기본 텍스트 검색: 단어 또는 구문의 전체 또는 일부를 사용하여 콘텐츠를 검색하여 안정적으로 결과를 받습니다. 쿼리 조건자 예시:
- 모든 단어 일치 [tricolor rat terrier]
- 정확한 단어 또는 구문 ["rat terrier"]
- 다음 단어 중 하나 [miniature OR standard]
- 근접성이 가까운 단어 [world AROUND(3) cup]
- 하위 문자열 [start*]
- 숫자 검색: 숫자 등호 및 부등호 검색을 실행합니다. 등호 검색은 숫자와 일치시킵니다. 범위 및 부등호 검색은 특정 범위 내의 숫자와 일치시킵니다.
- N-그램 기반 검색: 고유 명사 및 이름 등 철자가 변형된 단어를 일치시킵니다. 이 유형의 검색은 쿼리 텍스트를 철자가 틀린 이름, 다른 철자가 사용된 이름, 다른 철자 변형이 사용된 텍스트와 일치시키는 데도 도움이 됩니다.
- Soundex 검색: 발음이 비슷한 단어와 일치시킵니다.
전체 텍스트 검색 기능
Spanner 전체 텍스트 검색에는 다음과 같은 기능이 있습니다.
- 순위가 지정된 검색 결과: 쿼리가 문서와 얼마나 일치하는지 측정하기 위한 점수를 계산합니다(예: column_A에 더 큰 가중치 부여). SQL 표현식을 사용하여 순위를 맞춤설정합니다.
- 스니펫: 검색결과에서 일치하는 텍스트를 강조 표시합니다.
- 전역 지원: CJK 세분화를 비롯한 다양한 언어의 토큰화를 자동으로 지원합니다. 언어 수동 사양을 사용하면 추가적인 미세 조정을 수행할 수 있습니다.
- 거버넌스: 특정 단어와 일치하는 모든 항목을 찾습니다.
- 맞춤법 교정: 쿼리에서 맞춤법이 틀린 단어를 스토리지에 있는 올바른 맞춤법의 단어와 일치하도록 자동으로 수정합니다. 예를 들어 사용자가 'girafe'를 검색하면 검색은 'giraffe'가 포함된 문서를 찾습니다.
- 문맥 동의어 추가(검색 제외 단어 포함): 문맥과 관련된 동의어를 자동으로 추가하여 검색 결과를 개선합니다. 예를 들어 'the house'는 'this house'와 일치시키고 'cat picture'는 'kitty picture'와 일치시킵니다.
- 텍스트 간 문맥 숫자 번역: 숫자의 텍스트 버전을 숫자 표현과 일치시키고, 그 반대의 경우도 마찬가지입니다. 예를 들어 'five cats'는 '5 cats'와 일치시킵니다.
- 자동 복수형 변환: 'cat'을 'cats'와 일치시킵니다.
전체 텍스트 검색 개념
전체 텍스트 검색에는 다음과 같은 주요 개념이 있습니다.
- 문서는 지정된 행의 검색 가능한 데이터를 나타냅니다.
- 토큰은 검색 색인에 저장된 문서의 각 단어를 나타냅니다.
- 토큰화 프로세스는 문서를 토큰으로 분할합니다.
- 토크나이저는 토큰화에 사용되는 SQL 함수입니다.
- 역색인은 토큰을 저장합니다. SQL 쿼리를 사용하여 역색인을 검색합니다.
전체 텍스트 검색 사용 사례
전체 텍스트 검색을 이해하기 위해 데이터베이스를 사용하여 각 사용자의 이메일을 저장하는 이메일 애플리케이션을 살펴보겠습니다. 각 행은 하나의 이메일입니다. 각 이메일에는 제목, 본문, 발신자, 수신자와 같은 열이 포함됩니다. 이메일 애플리케이션은 전체 텍스트 검색을 사용하여 사용자가 자연어 쿼리를 사용하여 받은편지함을 검색할 수 있도록 합니다.
- 검색은
Dallas OR Seattle
과 같은 쿼리를 지원합니다. 애플리케이션은 쿼리 언어를 사용하여 검색창의 최종 사용자 입력을 SQLSEARCH
함수에 직접 제공할 수 있습니다. - Spanner는 검색 색인을 사용하여 여러 필드에서 일치하는 문서를 찾습니다. 예를 들어 이메일 애플리케이션은 이메일 본문에 '예산'을, 발신자 이름에 'John'을 사용하여 제목에 '중요 메모'를 검색하는 쿼리를 실행할 수 있습니다.
검색 색인은 전체 텍스트 검색 외에도 다음과 같이 다양한 용도로 사용됩니다.
배열 열의 요소에 색인을 생성합니다. 배열 열을 사용하여 항목과 연결된 태그를 저장하는 애플리케이션을 생각해 보세요. 검색 색인을 사용하면 애플리케이션이 특정 태그가 포함된 행을 효율적으로 조회할 수 있습니다. 자세한 내용은 배열 토큰화를 참고하세요.
쿼리 조건 집합의 교집합에 있는 데이터를 찾습니다. 예를 들어 임의의 속성 집합(색상, 크기, 브랜드, 평점 등)을 사용하여 카탈로그에서 제품을 검색할 수 있습니다.
숫자 검색 조건을 단독으로 사용하거나 전체 텍스트 조건과 함께 사용합니다. 검색 색인이 숫자 검색에 유용한 경우의 예시는 다음과 같습니다.
- 전체 텍스트 애플리케이션과 결합되는 경우. 예를 들어 제목이 사진이고 크기가 1MB를 초과하는 이메일을 찾습니다.
- 앞에서 설명한 조건의 교집합에 포함되는 경우.
예를 들어
color = "yellow" AND size = 14 AND rating >= 4.5
인 제품을 찾습니다. - 숫자 열의 교집합을 검색하는 경우. 예를 들어 이벤트 시작 시간과 종료 시간을 저장하는 테이블을 생각해 보세요. 검색 색인은 특정 시점에 발생한 이벤트(
start_time <= @p AND end_time > @p
)를 찾는 쿼리를 효율적으로 구현할 수 있습니다.
전체 텍스트 검색 단계
Spanner에서 전체 텍스트 검색에는 다음 단계가 필요합니다.
- Spanner 토크나이저 함수(예:
TOKENIZE_SUBSTRING
)를 사용하여 문서를 토큰화합니다. 자세한 내용은 토큰화를 참조하세요. CREATE SEARCH INDEX
DDL 문을 사용하여 토큰을 보관할 검색 색인을 만듭니다. 자세한 내용은 검색 색인을 참고하세요.- Spanner
SEARCH
함수를 사용하여 검색 색인에서 문서를 쿼리합니다. 자세한 내용은 쿼리 개요를 참고하세요. - Spanner
SCORE
함수를 사용하여 쿼리 결과의 순위를 지정합니다. 자세한 내용은 검색결과 순위 지정을 참조하세요.
제한사항
- 전체 텍스트 검색은 Assured Workloads를 지원하지 않습니다.
가격 책정
전체 텍스트 검색을 사용할 때 Spanner에서 추가 요금이 청구되지는 않지만, 전체 텍스트 검색을 구현하면 컴퓨팅 및 스토리지 리소스를 추가로 확보해야 하므로 비용이 증가합니다.
자세한 내용은 Spanner 가격 책정을 참조하세요.
다음 단계
- 토큰화 및 Spanner 토크나이저 알아보기
- 검색 색인 알아보기
- 전체 텍스트 검색어 알아보기