다음을 통해 공유


XML 열에 전체 텍스트 검색 사용

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

XML 값의 콘텐츠를 인덱싱하나 XML 마크업은 무시하는 XML 열에 전체 텍스트 인덱스를 만들 수 있습니다. 요소 태그는 토큰 경계로 사용됩니다. 다음 항목이 인덱싱됩니다.

  • XML 요소의 콘텐츠입니다.

  • 이러한 값이 숫자 값이 아닌 한 최상위 요소의 XML 특성 내용만 해당합니다.

가능하면 다음과 같은 방법으로 전체 텍스트 검색을 XML 인덱스와 결합할 수 있습니다.

  1. 먼저 SQL 전체 텍스트 검색을 사용하여 원하는 XML 값을 필터링합니다.

  2. 그런 다음 XML 열에서 XML 인덱스를 사용하는 해당 XML 값을 쿼리합니다.

예: XML 쿼리와 전체 텍스트 검색 결합

XML 열에 전체 텍스트 인덱스를 만든 후 다음 쿼리는 XML 값에 책 제목에 "custom"이라는 단어가 포함되어 있는지 확인합니다.

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

contains() 메서드는 전체 텍스트 인덱스로 문서의 아무 곳이나 "custom"이라는 단어가 포함된 XML 값을 하위 집합으로 설정합니다. exist() 절은 "custom"이 책의 제목 부분에 있는지 확인합니다.

contains()contains() XQuery를 사용하는 전체 텍스트 검색에는 서로 다른 의미 체계가 있습니다. 후자는 부분 문자열 일치이고 전자는 형태소 분석을 사용하는 토큰 일치입니다. 따라서 제목에 "run"이 있는 문자열을 검색하는 경우 전체 텍스트 contains()contains() XQuery가 모두 만족하므로 일치 항목에는 "run", "runs" 및 "running"이 포함됩니다. 그러나 쿼리는 전체 텍스트 contains()가 실패한다는 제목에서 "사용자 지정 가능"이라는 단어와 일치하지 않지만 contains() XQuery는 만족합니다. 일반적으로 순수 부분 문자열 일치의 경우 전체 텍스트 contains() 절을 제거해야 합니다.

또한 전체 텍스트 검색은 단어 형태소 분석을 사용하지만 XQuery contains()는 리터럴 일치 검색입니다. 이러한 차이점은 다음 예에서 확인할 수 있습니다.

예: 형태소 분석을 사용하여 XML 값에 대한 전체 텍스트 검색

이전 예에서 수행된 XQuery contains() 검사는 일반적으로 제거할 수 없습니다. 다음 쿼리를 살펴보세요.

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

문서의 "ran"이라는 단어는 형태소 분석으로 인해 검색 조건과 일치합니다. 또한 XQuery를 사용하여 검색 컨텍스트를 확인하지 않습니다.

전체 텍스트 인덱싱된 AXSD를 사용하여 XML을 관계형 열로 분해하는 경우 XML 뷰를 통해 발생하는 XPath 쿼리는 기본 테이블에서 전체 텍스트 검색을 수행하지 않습니다.

참고 항목