XML 열과 함께 전체 텍스트 검색 사용

적용 대상:SQL ServerAzure SQL DatabaseAzure 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"이라는 단어가 책 제목에서 발생하도록 합니다.

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

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

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

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

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

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

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

참고 항목