XML 열의 전체 텍스트 인덱스
XML 값의 내용을 인덱싱하지만 XML 태그는 무시하는 전체 텍스트 인덱스를 XML 열에 만들 수 있습니다. 특성 값은 숫자 값이 아니면 전체 텍스트 인덱싱됩니다. 요소 태그는 토큰 경계로 사용됩니다. 가능한 경우 다음과 같은 방식으로 전체 텍스트 검색을 XML 인덱스와 조합할 수 있습니다.
먼저 SQL 전체 텍스트 검색을 사용하여 원하는 XML 값을 필터링합니다.
그런 다음 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() 및 XQuery **contains()**를 사용하는 전체 텍스트 검색은 서로 다른 의미를 가집니다. 후자는 하위 문자열 일치 검색이며 전자는 형태소 분석을 사용하는 토큰 일치 검색입니다. 따라서 검색이 제목에 "run"이 포함된 문자열을 찾는 경우, 전체 텍스트 contains() 및 Xquery **contains()**가 모두 만족하기 때문에 일치 항목에는 "run", "runs" 및 "running"이 포함됩니다. 하지만 쿼리가 제목에 있는 "customizable"이라는 단어는 검색하지 못하는데 그 이유는 Xquery **contains()**는 만족하지만 전체 텍스트 **contains()**는 실패하기 때문입니다. 일반적으로 순수한 부분 문자열 비교를 위해 전체 텍스트 contains() 절을 제거해야 합니다.
또한 전체 텍스트 검색은 단어의 형태소 분석을 사용하지만 XQuery **contains()**는 리터럴 일치 검색입니다. 이러한 차이점은 다음 예에서 확인할 수 있습니다.
예: 형태소 분석을 사용하여 XML 값에서 전체 텍스트 검색
이전 예에서 수행된 XQuery contains() 검사는 일반적으로 제거할 수 없습니다. 다음 쿼리를 살펴보십시오.
SELECT *
FROM T
WHERE CONTAINS(xCol,'run')
문서에 있는 "ran"이라는 단어는 형태소 분석으로 인해 검색 조건과 일치합니다. 또한 검색 컨텍스트는 XQuery를 사용하여 검사되지 않습니다.
전체 텍스트 인덱싱되는 AXSD를 사용하여 XML을 관계형 열로 분해하는 경우 XML 뷰에 대해 발생하는 XPath 쿼리는 기본 테이블에서 전체 텍스트 검색을 수행하지 않습니다.