전체 텍스트 인덱스 생성 시 언어 선택
적용 대상: SQL Server Azure SQL 데이터베이스
전체 텍스트 인덱스를 만들 때는 인덱싱된 열에 대한 열 수준 언어를 지정해야 합니다. 지정된 언어의 단어 분리기 및 형태소 분석기는 열의 전체 텍스트 쿼리에서 사용됩니다. 전체 텍스트 인덱스를 만들기 위해 열 언어를 선택할 때 고려할 몇 가지 사항이 있습니다. 이러한 고려 사항은 전체 텍스트 엔진으로 텍스트를 토큰화한 다음 인덱싱하는 방법과 관련이 있습니다.
참고 항목
전체 텍스트 인덱스 열에 대한 열 수준 언어를 지정하려면 열을 지정할 때 LANGUAGE language_term 절을 사용합니다. 자세한 내용은 CREATE FULLTEXT INDEX(Transact-SQL) 및 ALTER FULLTEXT INDEX(Transact-SQL)를 참조하세요.
전체 텍스트 검색의 언어 지원
이 섹션에서는 단어 분리기 및 형태소 분석기를 소개하고 전체 텍스트 검색에서 열 수준 언어의 LCID를 사용하는 방법을 설명합니다.
단어 분리기 및 형태소 분석기 소개
SQL Server 2008(10.0.x) 이상 버전에서는 이전에 SQL Server에서 사용되던 것보다 크게 향상된 완전히 새로운 단어 분리기 및 형태소 분석기 패밀리를 제공합니다.
참고 항목
MS NLG(Microsoft 자연어 그룹)는 이러한 새로운 언어 구성 요소를 구현하고 지원합니다.
새 단어 분리기는 다음과 같은 이점을 제공합니다.
견고성
테스트 결과 새 단어 분리기는 고압 쿼리 환경에서 강력합니다.
보안
새로운 단어 처리기는 언어 구성 요소의 향상된 보안 기능 덕분에 SQL Server에서 기본적으로 사용하도록 설정되어 있습니다. SQL Server의 전반적인 보안 및 견고성을 향상시키려면 단어 분리기 및 필터와 같은 외부 구성 요소의 서명을 확인하는 것이 좋습니다. 전체 텍스트를 구성하여 이러한 구성 요소가 다음과 같이 서명되었는지 확인할 수 있습니다.
EXEC sp_fulltext_service 'verify_signature';
품질
새롭게 디자인된 단어 분리기는 테스트 결과 이전의 단어 분리기보다 형태소 분석 품질이 뛰어난 것으로 나타났습니다. 이렇게 하면 회수 정확도가 높아질 수 있습니다.
방대한 언어 목록에 대한 적용 범위, 단어 분리기는 SQL Server에 기본적으로 포함되며 기본적으로 사용하도록 설정됩니다.
SQL Server에 포함된 단어 분리기 및 형태소 분석기가 지원하는 언어 목록은 sys.fulltext_languages(Transact-SQL)를 참조하세요.
전체 텍스트 검색에서 열 수준 언어의 이름을 사용하는 방법
전체 텍스트 인덱스를 만들 때는 각 열에 대해 유효한 언어 이름을 지정해야 합니다. 유효한 언어 이름이 sys.fulltext_languages(Transact-SQL) 카탈로그 뷰에서 반환되지 않을 경우 전체 텍스트 검색은 동일 언어군에서 가장 근접한 언어 이름이 있으면 이를 대신 사용합니다. 그렇지 않으면 전체 텍스트 검색이 중립 단어 분리기로 대체됩니다. 이 대체 동작은 회수 정확도에 영향을 줄 수 있습니다. 따라서 전체 텍스트 인덱스 만들기 시 각 열에 대해 유효하고 사용 가능한 언어 이름을 지정하는 것이 좋습니다.
참고 항목
LCID는 char 또는 nchar등의 전체 텍스트 인덱싱에 적합한 모든 데이터 형식에 대해 사용됩니다. char, varchar 또는 text 형식 열의 정렬 순서가 LCID로 식별된 언어와 다른 언어 설정으로 설정된 경우 해당 열을 전체 텍스트 인덱싱 및 쿼리하는 동안 LCID가 사용됩니다.
단어 분리
단어 분리기는 언어별 단어 경계에 인덱싱되는 텍스트를 토큰화합니다. 따라서 단어 분리 동작은 언어마다 다릅니다. 한 언어 x를 사용하여 여러 언어 {x, y 및 z}를 인덱싱하는 경우 일부 동작으로 인해 예기치 않은 결과가 발생할 수 있습니다. 예를 들어 대시(-) 또는 쉼표(,)는 한 언어로 throw되지만 다른 언어에서는 throw되지 않는 단어 분리 요소일 수 있습니다. 또한 드문 경우지만 특정 단어가 다른 언어에서는 다른 형태소로 분류되어 예상치 못한 형태소 분석 동작이 발생할 수도 있습니다. 예를 들어 영어에서 단어 경계는 일반적으로 공백 또는 문장 부호의 일부 형태입니다. 독일어 등의 다른 언어에서는 단어 또는 문자 조합이 사용될 수 있습니다. 따라서 선택한 열 수준 언어는 해당 열의 행에 저장될 것으로 예상되는 언어를 나타내야 합니다.
서구권 언어
서구 어군의 경우 열에 저장할 내용의 언어가 무엇인지 확실하지 않거나 둘 이상의 언어로 된 내용을 저장하려는 경우에는 일반적으로 열에 저장할 내용의 언어 중 가장 복잡한 언어의 단어 분리기를 사용하는 것이 좋습니다. 예를 들어 단일 열에 영어, 스페인어 및 독일어 내용을 저장하려는 경우가 있습니다. 이 세 가지 서구권 언어는 매우 유사한 단어 분리 패턴을 가지고 있으며, 독일어 패턴은 가장 복잡합니다. 따라서 영어와 스페인어 텍스트를 올바르게 처리할 수 있는 독일어 단어 분리기를 사용하는 것이 좋습니다. 반면, 영어 단어 분리기는 독일어의 복합 단어 때문에 독일어 텍스트를 완벽하게 처리하지 못할 수 있습니다.
언어 패밀리에서 가장 복잡한 언어의 단어 분리기를 사용하면 패밀리의 모든 언어를 완벽하게 인덱싱할 수 없습니다. 가장 복잡한 단어 분리기가 다른 언어로 작성된 텍스트를 올바르게 처리할 수 없는 코너 사례가 있을 수 있습니다.
비서구권 언어
비서구권 언어(예: 중국어, 일본어, 힌디어 등)의 경우 위의 해결 방법이 언어적 이유로 반드시 작동하지는 않습니다. 비서구권 언어의 경우 다음 해결 방법 중 하나를 고려하세요.
언어군이 다른 언어의 경우
스페인어 및 일본어와 같이 열에 포함된 언어가 완전히 다른 경우 각 언어 내용을 서로 다른 열에 저장하는 방법을 고려해 보십시오. 이렇게 하면 열마다 해당 언어와 관련된 단어 분리기를 사용할 수 있습니다. 이 솔루션을 선택하고 쿼리 시간에 쿼리 언어를 모르는 경우 쿼리가 올바른 행 또는 문서를 찾을 수 있도록 두 열에 대해 쿼리를 실행해야 할 수 있습니다.
이진 내용의 경우(예: Microsoft Word 문서)
인덱싱된 내용이 binary 형식인 경우 전체 텍스트 검색 필터는 텍스트 내용을 단어 분리기로 보내기 위해 처리할 때 이진 파일 내에 있는 특정 언어 태그를 인식할 수 있습니다. 이 경우 인덱싱 시 필터는 문서의 문서 또는 섹션에 적합한 LCID를 내보냅니다. 그런 다음 전체 텍스트 엔진은 해당 LCID를 사용하여 언어에 대한 단어 분리기를 호출합니다. 하지만 여러 언어 내용을 인덱싱한 후에는 내용이 올바르게 인덱싱되었는지를 확인하는 것이 좋습니다.
일반 텍스트 콘텐츠
콘텐츠가 일반 텍스트인 경우 xml 데이터 형식으로 변환하고 각 특정 문서 또는 문서 섹션에 해당하는 언어를 나타내는 언어 태그를 추가할 수 있습니다. 그러나 이렇게 하려면 전체 텍스트 인덱싱 전에 언어를 알아야 합니다.
형태소 분석
열 수준 언어를 선택할 때 추가로 고려해야 할 사항은 형태소 분석입니다. 전체 텍스트 쿼리에서 형태소를 분석하는 것은 특정 언어로 된 단어의 모든 형태소 분석(변곡) 형식을 검색하는 프로세스입니다. 일반 단어 분리기를 사용하여 여러 언어를 처리하는 경우 형태소 분석 프로세스는 열의 다른 언어가 아닌 열에 지정된 언어에 대해서만 작동합니다. 예를 들어 독일어 형태소 분석기는 영어 또는 스페인어 등에는 작동하지 않습니다. 이는 쿼리 시간에 선택한 언어에 따라 회수에 영향을 줄 수 있습니다.
전체 텍스트 검색에 대한 열 유형의 영향
언어 선택에 대한 또 다른 고려 사항은 데이터가 표현되는 방식과 관련이 있습니다. varbinary(max) 열에 저장되지 않은 데이터에 대해서는 특수 필터링이 수행되지 않습니다. 일반적으로 텍스트는 있는 그대로 단어 분리기 구성 요소를 통과합니다.
또한 단어 분리기는 주로 작성된 텍스트를 처리하도록 설계되었습니다. 따라서 HTML과 같은 표시 유형이 텍스트에 포함되어 있을 경우 인덱싱 및 검색 중에 언어 정확도가 떨어질 수 있습니다. 이 경우 두 가지 선택 사항이 있습니다. 기본 방법은 단순히 varbinary(max) 열에 텍스트 데이터를 저장하고 필터링될 수 있도록 문서 형식을 나타내는 것입니다. 이 방법을 선택할 수 없으면 중립 단어 분리기를 사용하고 가능한 경우 의미 없는 단어 목록에 HTML의 'br'과 같은 표시 데이터를 추가할 수 있습니다.
참고 항목
중립 언어를 지정하면 언어 기반 형태소 분석은 적용되지 않습니다.
전체 텍스트 쿼리에서 기본이 아닌 열 수준 언어 지정
기본적으로 SQL Server에서 전체 텍스트 검색을 수행하면 전체 텍스트 절에 포함된 각 열에 대해 지정된 언어를 사용하여 쿼리 용어가 구문 분석됩니다. 이 동작을 재정의하려면 쿼리 시 기본이 아닌 언어를 지정합니다. 리소스가 설치된 지원되는 언어의 경우 CONTAINS, CONTAINSTABLE, FREETEXT, or FREETEXTTABLE 쿼리의 LANGUAGE language_term 절을 사용하여 쿼리 용어의 단어 분리, 형태소 분석, 동의어 사전 및 중지 단어 처리에 사용되는 언어를 지정할 수 있습니다.
참고 항목
CONTAINS(Transact-SQL)
CONTAINSTABLE(Transact-SQL)
데이터 형식(Transact-SQL)
FREETEXT(Transact-SQL)
FREETEXTTABLE(Transact-SQL)
검색 필터 구성 및 관리
sp_fulltext_service(Transact-SQL)
sys.fulltext_languages(Transact-SQL)
검색을 위해 단어 분리기와 형태소 분석기 구성 및 관리