다음을 통해 공유


FREETEXTTABLE(Transact-SQL)

적용 대상: SQL ServerAzure SQL Database Azure SQL Managed Instance

문자 기반 데이터 형식이 포함된 전체 텍스트 인덱싱된 열에서 SQL Server 전체 텍스트 검색을 수행하기 위해 Transact-SQL SELECT 문의 FROM 절 에 사용되는 함수입니다. 이 함수는 지정된 freetext_string 텍스트의 정확한 표현뿐만 아니라 의미와 일치하는 값을 포함하는 열에 대해 0개, 하나 이상의 행 테이블을 반환합니다. FREETEXTTABLE은 일반 테이블 이름인 것처럼 참조됩니다.

FREETEXTTABLE은 FREETEXT(Transact-SQL)와 동일한 종류의 일치 항목에 유용합니다.

FREETEXTTABLE을 사용하는 쿼리는 각 행에 대한 관련성 순위 값(RANK) 및 KEY(전체 텍스트 키)를 반환합니다.

참고 항목

SQL Server에서 지원되는 전체 텍스트 검색 형식에 대한 자세한 내용은 전체 텍스트 검색이 있는 쿼리를 참조하세요.

Transact-SQL 구문 표기 규칙

구문

FREETEXTTABLE (table , { column_name | (column_list) | * }   
          , 'freetext_string'   
     [ , LANGUAGE language_term ]   
     [ , top_n_by_rank ] )  

인수

table
전체 텍스트 쿼리용으로 표시된 테이블 이름입니다. 테이블 또는 는 1부, 2부 또는 3부 데이터베이스 개체 이름일 수 있습니다. 뷰를 쿼리할 때는 하나의 전체 텍스트 인덱싱된 기본 테이블만 포함할 수 있습니다.

테이블 은 서버 이름을 지정할 수 없으며 연결된 서버에 대한 쿼리에서 사용할 수 없습니다.

column_name
FROM 절에 지정된 테이블에 대한 하나 이상의 전체 텍스트 인덱싱된 열의 이름입니다. 열은 char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary 또는 varbinary(max) 형식이 될 수 있습니다.

column_list
여러 개의 열을 쉼표로 구분하여 지정할 수 있음을 나타냅니다. column_list는 괄호로 묶어야 합니다. language_term을 지정하지 않을 경우 column_list에 있는 모든 열의 언어가 같아야 합니다.

*
주어진 freetext_string을 검색하는 데 전체 텍스트 검색용으로 등록된 모든 열을 사용하도록 지정합니다. language_term 지정하지 않는 한 테이블의 모든 전체 텍스트 인덱싱된 열의 언어는 동일해야 합니다.

freetext_string
column_name에서 검색할 텍스트입니다. 단어, 구 또는 문장을 포함하여 모든 텍스트를 입력할 수 있습니다. 모든 용어나 용어의 형식이 전체 텍스트 인덱스에 있으면 일치하는 항목이 생성됩니다.

AND가 키워드인 CONTAINS 검색 조건과 달리 freetext_string 단어 'and'를 사용하는 경우 노이즈 단어 또는 중지 단어로 간주되어 삭제됩니다.

WEIGHT, FORMSOF, 와일드카드, NEAR 및 기타 구문은 사용할 수 없습니다. freetext_string은 단어가 분리되고 형태소가 분석되며 동의어 사전을 통해 전달됩니다.

LANGUAGE language_term
쿼리의 일부로 단어 분리, 형태소 분석, 동의어 사전 및 중지 단어 제거에 리소스를 사용할 언어입니다. 이 매개 변수는 선택적이며 언어의 LCID(로캘 ID)에 해당하는 문자열, 정수 또는 16진수 값으로 지정할 수 있습니다. language_term을 지정할 경우 해당 언어는 검색 조건의 모든 요소에 적용됩니다. 값을 지정하지 않으면 열의 전체 텍스트 언어가 사용됩니다.

언어가 다른 문서가 단일 열에 BLOB(Binary Large Object)으로 함께 저장된 경우 지정된 문서의 LCID(로캘 ID)에 따라 해당 내용을 인덱싱하는 데 사용할 언어가 결정됩니다. 이러한 열을 쿼리할 때 LANGUAGE language_term을 지정하면 검색 확률을 높일 수 있습니다.

문자열로 지정하는 경우 language_termsys.syslanguages(Transact-SQL) 호환성 뷰의 alias 열 값에 해당합니다. 문자열은 'language_term'과 같이 작은따옴표로 묶어야 합니다. 정수로 지정하는 경우 language_term은 언어를 식별하는 실제 LCID입니다. 16진수 값으로 지정하는 경우 language_term은 0x로 시작하는 16진수 LCID 값입니다. 16진수 값은 앞에 오는 0을 포함하여 8자리 수를 초과할 수 없습니다.

값이 DBCS(더블바이트 문자 집합) 형식인 경우 Microsoft SQL Server는 값을 유니코드로 변환합니다.

지정된 언어가 잘못되었거나 해당 언어에 해당하는 리소스가 설치되지 않은 경우 SQL Server는 오류를 반환합니다. 중립 언어 리소스를 사용하려면 0x0을 language_term으로 지정합니다.

top_n_by_rank
내림차순으로 가장 높은 순위 일치 항목만 반환되도록 지정합니다. 정수 값 n을 지정한 경우에만 적용됩니다. top_n_by_rank 다른 매개 변수와 결합된 경우 쿼리는 실제로 모든 조건자와 일치하는 행 수보다 적은 행을 반환할 수 있습니다. top_n_by_rank 사용하면 가장 관련성이 큰 적중 항목만 회수하여 쿼리 성능을 높일 수 있습니다.

설명

전체 텍스트 조건자와 함수는 단일 테이블에서 작동합니다. 이 사실은 FROM 조건자에 표시됩니다. 여러 테이블을 검색하려면 FROM 절에 조인된 테이블을 사용하여 두 개 이상의 테이블을 합한 결과 집합을 대상으로 검색 작업을 수행합니다.

FREETEXTTABLE은 FREETEXT 조건자와 동일한 검색 조건을 사용합니다.

CONTAINSTABLE과 마찬가지로 반환되는 테이블에는 적절한 행을 가져오고 행 순위 값을 사용하기 위해 쿼리 내에서 참조되는 KEY 및 RANK라는 열이 있습니다.

사용 권한

FREETEXTTABLE은 지정된 테이블 또는 테이블의 참조된 열에 대해 적절한 SELECT 권한이 있는 사용자만 호출할 수 있습니다.

예제

A. 간단한 예

다음 예제에서는 3개 카운티와 해당 플래그의 색을 나열하는 두 개의 열로 구성된 간단한 테이블을 만들고 채웁니다. 테이블의 전체 텍스트 카탈로그와 인덱스를 만들고 채웁니다. 그런 다음 FREETEXTTABLE 구문이 설명됩니다.

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));  
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);  
INSERT Flags VALUES ('France', 'Blue and White and Red');  
INSERT Flags VALUES ('Italy', 'Green and White and Red');  
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');  
SELECT * FROM Flags;  
GO  
  
CREATE FULLTEXT CATALOG TestFTCat;  
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;  
GO   
  
SELECT * FROM Flags;  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Blue');  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Yellow');  

B. INNER JOIN에서 FREETEXT 사용

다음 예제에서는 의미 high level of performance와 일치하는 설명이 포함된 제품의 설명과 순위를 반환합니다.

USE AdventureWorks2022;  
GO  
  
SELECT FT_TBL.Description  
    ,KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL   
    INNER JOIN FREETEXTTABLE(Production.ProductDescription,  
    Description,   
    'high level of performance') AS KEY_TBL  
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY RANK DESC;  
GO  

C. 언어 및 최고 등급 일치 항목 지정

다음 예제는 동일하며 language_term 및 top_n_by_rank 매개 변수의 LANGUAGE사용을 보여줍니다.

USE AdventureWorks2022;  
GO  
  
SELECT FT_TBL.Description  
    ,KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL   
    INNER JOIN FREETEXTTABLE(Production.ProductDescription,  
    Description,   
    'high level of performance',  
    LANGUAGE N'English', 2) AS KEY_TBL  
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY RANK DESC;  
GO  

참고 항목

LANGUAGE language_term 매개 변수는 top_n_by_rank 매개 변수를 사용할 필요가 없습니다.

참고 항목

전체 텍스트 검색 시작
전체 텍스트 카탈로그 만들기 및 관리
CREATE FULLTEXT CATALOG(Transact-SQL)
CREATE FULLTEXT INDEX(Transact-SQL)
전체 텍스트 인덱스 만들기 및 관리
전체 텍스트 검색을 사용한 쿼리
전체 텍스트 검색 쿼리 만들기(Visual Database Tools)
CONTAINS(Transact-SQL)
CONTAINSTABLE(Transact-SQL)
FREETEXT(Transact-SQL)
행 집합 함수(Transact-SQL)
SELECT(Transact-SQL)
WHERE(Transact-SQL)
사전 계산 순위 서버 구성 옵션
Azure SQL Database 및 Azure SQL Managed Instance의 기능 비교