XML 열에 전체 텍스트 검색 사용Use Full-Text Search with XML Columns

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)아니요Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse XML 값의 내용을 인덱싱하지만 XML 태그는 무시하는 전체 텍스트 인덱스를 XML 열에 만들 수 있습니다. You can create a full-text index on XML columns that indexes the content of the XML values, but ignores the XML markup. 요소 태그는 토큰 경계로 사용됩니다.Element tags are used as token boundaries. 다음 항목이 인덱싱됩니다.The following items are indexed:

  • XML 요소의 내용입니다.The content of XML elements.

  • 그 값이 숫자 값이 아니면 최상위 요소의 XML 특성의 내용만 해당합니다.The content of XML attributes of the top-level element only, unless those values are numeric values.

    가능한 경우 다음과 같은 방식으로 전체 텍스트 검색을 XML 인덱스와 조합할 수 있습니다.When possible, you can combine full-text search with XML index in the following way:

  1. 먼저 SQL 전체 텍스트 검색을 사용하여 원하는 XML 값을 필터링합니다.First, filter the XML values of interest by using SQL full-text search.

  2. 그런 다음 XML 열에서 XML 인덱스를 사용하는 해당 XML 값을 쿼리합니다.Next, query those XML values that use XML index on the XML column.

예제: 전체 텍스트 검색을 XML 쿼리와 결합Example: Combining Full-text Search with XML Querying

XML 열에 전체 텍스트 인덱스를 만든 후 다음 쿼리는 XML 값에 책 제목 중 "custom"이라는 단어가 포함되어 있는지 확인합니다.After the full-text index has been created on the XML column, the following query checks that an XML value contains the word "custom" in the title of a book:

SELECT *   
FROM   T   
WHERE  CONTAINS(xCol,'custom')   
AND    xCol.exist('/book/title/text()[contains(.,"custom")]') =1  

contains() 메서드는 전체 텍스트 인덱스를 사용하여 문서의 아무 곳에나 "custom"이 포함된 XML 값을 분류합니다.The contains() method uses the full-text index to subset the XML values that contain the word "custom" anywhere in the document. exist() 절은 "custom"이 책의 제목 부분에 있는지 확인합니다.The exist() clause ensures that the word "custom" occurs in the title of a book.

contains() 및 XQuery contains() 를 사용하는 전체 텍스트 검색은 서로 다른 의미를 가집니다.A full-text search that uses contains() and XQuery contains() has different semantics. 후자는 하위 문자열 일치 검색이며 전자는 형태소 분석을 사용하는 토큰 일치 검색입니다.The latter is a substring match and the former is a token match that uses stemming. 따라서 검색이 제목에 "run"이 포함된 문자열을 찾는 경우, 전체 텍스트 contains() 및 Xquery contains() 가 모두 만족하기 때문에 일치 항목에는 "run", "runs" 및 "running"이 포함됩니다.Therefore, if the search is for the string that has "run" in the title, the matches will include "run", "runs", and "running", because both the full-text contains() and the Xquery contains() are satisfied. 하지만 쿼리가 전체 텍스트 contains() 가 실패한 제목에서 "customizable"이라는 단어와 일치하지 않지만 Xquery contains() 는 만족합니다.However, the query does not match the word "customizable" in the title in that the full-text contains() fails, but the Xquery contains() is satisfied. 일반적으로 순수한 부분 문자열 비교를 위해 전체 텍스트 contains() 절을 제거해야 합니다.Generally, for pure substring match, the full-text contains() clause should be removed.

또한 전체 텍스트 검색은 단어 형태소 분석을 사용하지만 XQuery contains() 는 리터럴 일치 검색입니다.Additionally, full-text search uses word stemming, but XQuery contains() is a literal match. 이러한 차이점은 다음 예에서 확인할 수 있습니다.This difference is illustrated in the next example.

예제: 형태소 분석을 사용하여 XML 값에서 전체 텍스트 검색Example: Full-text Search on XML Values Using Stemming

이전 예에서 수행된 XQuery contains() 검사는 일반적으로 제거할 수 없습니다.The XQuery contains() check that was performed in the previous example generally cannot be eliminated. 다음 쿼리를 살펴보십시오.Consider this query:

SELECT *   
FROM   T   
WHERE  CONTAINS(xCol,'run')   

문서에 있는 "ran"이라는 단어는 형태소 분석으로 인해 검색 조건과 일치합니다.The word "ran" in the document matches the search condition because of stemming. 또한 검색 컨텍스트는 XQuery를 사용하여 검사되지 않습니다.Additionally, the search context is not checked by using XQuery.

전체 텍스트 인덱싱되는 AXSD를 사용하여 XML을 관계형 열로 분해하는 경우 XML 뷰에 대해 발생하는 XPath 쿼리는 기본 테이블에서 전체 텍스트 검색을 수행하지 않습니다.When XML is decomposed into relational columns by using AXSD that are full-text indexed, XPath queries that occur over the XML view do not perform full-text search on the underlying tables.

참고 항목See Also

XML 인덱스(SQL Server)XML Indexes (SQL Server)