전체 텍스트 인덱스 생성 시 언어 선택Choose a Language When Creating a Full-Text Index

전체 텍스트 인덱스를 만들 때는 인덱싱된 열에 대한 열 수준 언어를 지정해야 합니다.When creating a full-text index, you need to specify a column-level language for the indexed column. 지정된 언어의 단어 분리기 및 형태소 분석기 는 인덱싱된 열에 대한 전체 텍스트 쿼리에 사용됩니다.The word breaker and stemmers of the specified language will be used by full-text queries on the column. 전체 텍스트 인덱스를 만들기 위해 열 언어를 선택할 때 고려할 몇 가지 사항이 있습니다.There are a couple of things to consider when choosing the column language when creating a full-text index. 이러한 고려 사항은 전체 텍스트 엔진으로 텍스트를 토큰화한 다음 인덱싱하는 방법과 관련이 있습니다.These considerations relate to how your text is tokenized and then indexed by Full-Text Engine.

참고

전체 텍스트 인덱스 열에 대한 열 수준 언어를 지정하려면 열을 지정할 때 LANGUAGE language_term 절을 사용합니다.To specify a column-level language for a column of full-text index, use the LANGUAGE language_term clause when specifying the column. 자세한 내용은 CREATE FULLTEXT INDEX(Transact-SQL)ALTER FULLTEXT INDEX(Transact-SQL)를 참조하세요.For more information, see CREATE FULLTEXT INDEX (Transact-SQL) and ALTER FULLTEXT INDEX (Transact-SQL).

전체 텍스트 검색의 언어 지원Language Support in Full-Text Search

이 섹션에서는 단어 분리기 및 형태소 분석기를 소개하고 전체 텍스트 검색에서 열 수준 언어의 LCID를 사용하는 방식에 대해 설명합니다.This section provides an introduction to word breakers and stemmers, and discusses how full-text search uses the LCID of the column-level language.

단어 분리기 및 형태소 분석기 소개Introduction to Word Breakers and Stemmers

SQL Server 2008SQL Server 2008 이상 버전에서는 이전에 SQL ServerSQL Server에서 사용되던 것보다 크게 향상된 완전히 새로운 단어 분리기 및 형태소 분석기 패밀리를 제공합니다. and later versions include a complete new family of word breakers and stemmers that are significantly better than those previously available in SQL ServerSQL Server.

참고

이러한 새로운 언어 구성 요소는 MS NLG(Microsoft Natural Language Group)에서 구현하고 지원합니다.The Microsoft Natural Language Group (MS NLG) implemented and supports these new linguistic components.

새로운 단어 분리기가 제공하는 이점은 다음과 같습니다.The new word breakers provide the following benefits:

  • 견고성Robustness

    테스트 결과 새로운 단어 분리기는 쿼리 처리량이 많은 환경에서 강력한 성능을 제공하는 것으로 나타났습니다.Testing has shown that the new word breakers are robust in high-pressure query environments.

  • 보안Security

    새로운 단어 처리기는 언어 구성 요소의 향상된 보안 기능 덕분에 SQL Server에서 기본적으로 사용하도록 설정되어 있습니다.The new word breakers are enabled by default in SQL Server thanks to security improvements in linguistic components. SQL Server의 전반적인 보안 및 견고성을 향상시키려면 단어 분리기 및 필터와 같은 외부 구성 요소의 서명을 확인하는 것이 좋습니다.We highly recommend that external components such as word breakers and filters be signed to improve the overall security and robustness of SQL Server. 이러한 구성 요소에 서명이 있는지 확인하도록 전체 텍스트를 구성하는 방법은 다음과 같습니다.You can configure full-text to verify that these components are signed as follows:

    EXEC sp_fulltext_service 'verify_signature';  
    
  • 품질Quality

    새롭게 디자인된 단어 분리기는 테스트 결과 이전의 단어 분리기보다 형태소 분석 품질이 뛰어난 것으로 나타났습니다.Word breakers have been redesigned, and testing has shown that the new word breakers provide better semantic quality than previous word breakers. 이는 재호출 정확성을 높입니다.This increases the recall accuracy.

  • 다양한 언어에 대한 단어 분리기가 SQL Server에 포함되었으며 기본적으로 사용하도록 설정되어 있습니다.Coverage for a vast list of languages, word breakers are included in SQL Server out of the box and enabled by default .

    SQL Server에 포함된 단어 분리기 및 형태소 분석기가 지원하는 언어 목록은 sys.fulltext_languages(Transact-SQL)를 참조하세요.For a list of the languages for which SQL Server includes a word breaker and stemmers, see sys.fulltext_languages (Transact-SQL).

전체 텍스트 검색에서 열 수준 언어 이름을 사용하는 방식How Full-Text Search Uses the Name of the Column-Level Language

전체 텍스트 인덱스를 만들 때는 각 열마다 유효한 언어 이름을 지정해야 합니다.When creating a full-text index, you need to specify a valid language name for each column. 유효한 언어 이름이 sys.fulltext_languages(Transact-SQL) 카탈로그 뷰에서 반환되지 않을 경우 전체 텍스트 검색은 동일 언어군에서 가장 근접한 언어 이름이 있으면 이를 대신 사용합니다.If a language name is valid but not returned by the sys.fulltext_languages (Transact-SQL) catalog view, full-text search falls back to the closest available language name of the same language family, if any. 그렇지 않으면 중립 단어 분리기를 사용합니다.Otherwise, full-text search falls back to the Neutral word breaker. 이러한 대체 동작은 재호출 정확성에 영향을 줄 수 있습니다.This fall-back behavior might affect the recall accuracy. 따라서 전체 텍스트 인덱스를 만들 때는 각 열마다 유효하고 사용 가능한 언어 이름을 지정하는 것이 가장 좋습니다.Therefore we strongly recommend that you specify a valid and available language name for each column when creating a full-text index.

참고

LCID는 char 또는 nchar등의 전체 텍스트 인덱싱에 적합한 모든 데이터 형식에 대해 사용됩니다.The LCID is used against all data types eligible for full-text indexing (such as char or nchar). char, varchar또는 text 형식 열의 정렬 순서를 LCID로 식별된 언어와 다른 언어 설정으로 지정할 경우에도 이러한 행에 대한 전체 텍스트 인덱싱 및 쿼리를 수행하는 동안에는 LCID가 사용됩니다.If you have the sort order of a char, varchar, or text type column set to a language setting different from the language identified by the LCID, the LCID is used anyway during full-text indexing and querying of those columns.

단어 분리Word Breaking

단어 분리기는 특정 언어와 관련된 단어 경계에서 인덱싱되는 텍스트를 토큰화합니다.A word breaker tokenizes the text being indexed on word boundaries, which are language specific. 따라서 단어 분리 동작은 각 언어마다 다릅니다.Therefore, word-breaking behavior differs among different languages. x라는 언어를 사용하여 {x, y 및 z}의 여러 언어를 인덱싱하는 경우 일부 동작에서 예상치 못한 결과가 발생할 수 있습니다.If you use one language, x, to index a number of languages {x, y, and ,z}, some of the behavior might cause unexpected results. 예를 들어 언어에 따라 대시(-) 또는 쉼표(,)가 버려지는 단어 분리 요소이거나 그렇지 않을 수 있습니다.For example, a dash (-) or a comma (,) might be a word-break element that will be thrown away in one language but not in another. 또한 드문 경우지만 특정 단어가 다른 언어에서는 다른 형태소로 분류되어 예상치 못한 형태소 분석 동작이 발생할 수도 있습니다.Also rarely unexpected stemming behavior might occur because a given word might stem differently in different language. 예를 들어 영어에서는 일반적으로 공백이나 특정 형태의 문장 부호가 단어 경계로 사용되지만For example, in the English language, word boundaries are typically white space or some form of punctuation. 독일어 등의 다른 언어에서는 단어 또는 문자 조합이 사용될 수 있습니다.In other languages, such as German, words or characters may be combined together. 따라서 열의 행에 저장할 내용의 언어에 해당하는 열 수준 언어를 선택해야 합니다.Therefore, the column-level language that you choose should represent the language that you expect will be stored in rows of that column.

서구 언어Western Languages

서구 어군의 경우 열에 저장할 내용의 언어가 무엇인지 확실하지 않거나 둘 이상의 언어로 된 내용을 저장하려는 경우에는 일반적으로 열에 저장할 내용의 언어 중 가장 복잡한 언어의 단어 분리기를 사용하는 것이 좋습니다.For the Western family of languages, if you are unsure which languages will be stored in a column or you expect more than one to be stored, a general workaround is to use the word breaker for the most complex language that might be stored in the column. 예를 들어 단일 열에 영어, 스페인어 및 독일어 내용을 저장하려는 경우가 있습니다.For instance, you might expect to store English, Spanish and German content in a single column. 이러한 세 가지 서구 언어는 단어 분리 패턴이 매우 비슷하지만 이 중에서도 독일어 패턴이 가장 복잡합니다.These three Western languages possess very similar word-breaking patterns, with the German patterns being the most complex. 따라서 이 경우에는 영어와 스페인어 텍스트까지 올바르게 처리할 수 있는 독일어 단어 분리기를 사용하는 것이 좋습니다.Therefore, a good choice is this case would be to use the German word breaker, which should be able to process English and Spanish text correctly. 반대로 영어 단어 분리기는 독일어의 복합어 때문에 독일어 텍스트를 완전하게 처리할 수 없습니다.In contrast, the English word breaker might not process German text perfectly because of the compound words of German.

한 언어군에서 가장 복잡한 언어의 단어 분리기를 사용한다고 해서 반드시 이러한 언어군의 모든 언어를 완전하게 인덱싱할 수 있다는 것은 아닙니다.Note that using the word breaker of the most complex language in a language family does not guarantee perfect indexing of every language in the family. 가장 복잡한 단어 분리기라도 다른 언어로 쓰인 텍스트를 제대로 처리하지 못할 수 있습니다.Corner cases might exist in which the most complex word breaker cannot correctly handle text written in another language.

동구 언어Non Western Languages

일본어, 중국어 및 힌디어와 같은 동구 언어의 경우 언어적인 차이 때문에 위와 같은 방법이 반드시 효과가 있다고 보기는 어렵습니다.For non Western languages (such as Chinese, Japanese, Hindi, and so forth) the above workaround does not necessarily work, for linguistic reasons. 동구 언어의 경우에는 다음과 같은 방법 중 하나를 고려해 보십시오.For non Western languages, consider one of the following workarounds:

  • 언어군이 다른 언어의 경우For languages from different families

    스페인어 및 일본어와 같이 열에 포함된 언어가 완전히 다른 경우 각 언어 내용을 서로 다른 열에 저장하는 방법을 고려해 보십시오.If a column might contain dramatically different languages, for example, Spanish and Japanese, consider storing the content of different languages in separate columns. 이렇게 하면 열마다 해당 언어와 관련된 단어 분리기를 사용할 수 있습니다.This would allow you to use the language-specific word breaker for each column. 이 방법을 사용하면 쿼리 단계에서 쿼리 언어를 알 수 없는 경우에 올바른 행 또는 문서를 찾을 수 있도록 두 열에 대해 쿼리를 실행해야 할 수도 있습니다.If you choose this solution and you don't know the query language at query time, you might need to issue the query against both columns to ensure that the query finds the right row or document.

  • 이진 내용의 경우(예: Microsoft Word 문서)For Binary content (such as Microsoft Word documents)

    인덱싱된 내용이 binary 형식인 경우 전체 텍스트 검색 필터는 텍스트 내용을 단어 분리기로 보내기 위해 처리할 때 이진 파일 내에 있는 특정 언어 태그를 인식할 수 있습니다.When the indexed content is of binary type, the full-text search filter that processes the textual content before sending it to the word breaker might honor specific language tags existing within the binary file. 이 경우 인덱싱 단계에서 필터가 문서 전체 또는 문서 섹션의 정확한 LCID를 내보냅니다.In this case, at indexing time, the filter will emit the right LCID for a document or section of a document. 그런 다음 전체 텍스트 엔진이 이 LCID를 통해 적합한 언어의 단어 분리기를 호출합니다.The Full-Text Engine will then call the word breaker for the language with that LCID. 하지만 여러 언어 내용을 인덱싱한 후에는 내용이 올바르게 인덱싱되었는지를 확인하는 것이 좋습니다.However, after indexing multi language content, we recommend that you verify that the content was correctly indexed.

  • 일반 텍스트 내용의 경우For plain text content

    내용이 일반 텍스트로 구성된 경우 xml 데이터 형식으로 변환하여 특정 문서 전체 또는 문서 섹션에 해당하는 언어를 나타내는 언어 태그를 추가할 수 있습니다.When your content is plain text, you can convert it to the xml data type and add language tags that indicate the language corresponding to each specific document or document section. 하지만 이렇게 하려면 전체 텍스트 인덱싱 전에 해당 언어를 알아야 합니다.For this to work, however, you need to know the language before full-text indexing.

형태소 분석Stemming

열 수준 언어를 선택할 때는 형태소 분석도 고려해야 합니다.An additional consideration when choosing your column-level language is stemming. 전체 텍스트 쿼리의형태소 분석 이란 특정 언어로 된 한 단어의 모든 형태소(굴절형)를 검색하는 프로세스를 말합니다.Stemming in full-text queries is the process of searching for all stemmed (inflectional) forms of a word in a particular language. 일반적인 단어 분리기를 사용하여 몇 가지 언어를 처리하는 경우 형태소 분석 프로세스는 열에 대해 지정된 언어에 대해서만 작동하고, 열의 다른 언어에 대해서는 작동하지 않습니다.When you use a generic word breaker to process several languages, the stemming process works only for the language specified for the column, not for other languages in the column. 예를 들어 독일어 형태소 분석기는 영어 또는 스페인어 등에는 작동하지 않습니다.For example, German stemmers do not work for English or Spanish (and so forth). 이는 쿼리 단계에서 선택한 언어에 따라 회수에 영향을 줄 수 있습니다.This might affect your recall depending of which language you choose at query time.

전체 텍스트 검색에 대한 열 유형의 영향Effect of Column Type on Full-Text Search

언어 선택에서 또 다른 고려 사항은 데이터 표현 방법과 관련이 있습니다.Another consideration in language choice is related to how the data is represented. varbinary(max) 열에 저장되지 않은 데이터에 대해서는 특수 필터링이 수행되지 않습니다.For data that is not stored in varbinary(max) column, no special filtering is performed. 일반적으로 텍스트는 있는 그대로 단어 분리기 구성 요소를 통과합니다.Rather, the text is generally passed through the word breaking component as-is.

또한 단어 분리기는 주로 문자 텍스트를 처리합니다.Also, word breakers are designed mainly to process written text. 따라서 HTML과 같은 표시 유형이 텍스트에 포함되어 있을 경우 인덱싱 및 검색 중에 언어 정확도가 떨어질 수 있습니다.So, if you have any type of markup (such as HTML) on your text, you may not get great linguistic accuracy during indexing and search. 이 경우 두 가지 방법을 선택할 수 있습니다. 권장되는 방법은 단순히 텍스트 데이터를 varbinary(max) 열에 저장하고 해당 문서 유형을 필터링하도록 지정하는 것입니다.In that case, you have two choices—the preferred method is simply to store the text data in varbinary(max) column, and to indicate its document type so it may be filtered. 이 방법을 선택할 수 없으면 중립 단어 분리기를 사용하고 가능한 경우 의미 없는 단어 목록에 HTML의 'br'과 같은 표시 데이터를 추가할 수 있습니다.If this is not an option, you may consider using the neutral word breaker and, if possible, adding markup data (such as 'br' in HTML) to your noise word lists.

참고

중립 언어를 지정하면 언어 기반 형태소 분석은 적용되지 않습니다.Language based stemming does not come into play when you specify the neutral language.

전체 텍스트 쿼리에서 기본이 아닌 열 수준 언어 지정Specifying a Non-default Column-Level Language in a Full-Text Query

기본적으로 SQL ServerSQL Server에서 전체 텍스트 검색을 수행하면 전체 텍스트 절에 포함된 각 열에 대해 지정된 언어를 사용하여 쿼리 용어가 구문 분석됩니다.By default, in SQL ServerSQL Server, full-text search will parse the query terms using the language specified for each column that is included in the full-text clause. 이러한 동작을 무시하려면 쿼리 단계에서 기본 언어가 아닌 다른 언어를 지정합니다.To override this behavior, specify a nondefault language at query time. 리소스가 설치되어 있는 지원 언어의 경우 CONTAINS , CONTAINSTABLE, FREETEXT또는 FREETEXTTABLE쿼리의 LANGUAGE language_term 절을 사용하여 쿼리 용어의 단어 분리, 형태소 분석, 동의어 사전 및 중지 단어 처리에 사용되는 언어를 지정할 수 있습니다.For supported languages whose resources are installed, the LANGUAGE language_term clause of a CONTAINS, CONTAINSTABLE, FREETEXT, or FREETEXTTABLE query can be used to specify the language used for word breaking, stemming, thesaurus, and stopword processing of the query terms.

참고 항목See Also

CONTAINS(Transact-SQL) CONTAINS (Transact-SQL)
CONTAINSTABLE(Transact-SQL) CONTAINSTABLE (Transact-SQL)
데이터 형식(Transact-SQL) Data Types (Transact-SQL)
FREETEXT(Transact-SQL) FREETEXT (Transact-SQL)
FREETEXTTABLE(Transact-SQL) FREETEXTTABLE (Transact-SQL)
검색 필터 구성 및 관리 Configure and Manage Filters for Search
sp_fulltext_service(Transact-SQL) sp_fulltext_service (Transact-SQL)
sys.fulltext_languages(Transact-SQL) sys.fulltext_languages (Transact-SQL)
검색을 위해 단어 분리기와 형태소 분석기 구성 및 관리Configure and Manage Word Breakers and Stemmers for Search