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