Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Для XML-столбцов можно создавать полнотекстовые индексы, индексирующие XML-значения, но игнорирующие XML-разметку. Теги элементов используются в качестве границ токенов. Индексируются следующие элементы:
Содержимое XML-элементов.
Только содержимое XML-атрибутов элемента на высшем уровне, за исключением случаев, когда эти значения являются числовыми.
Иногда можно совместно пользоваться полнотекстовым поиском и XML-индексом следующим образом.
Сначала отфильтруйте интересующие XML-значения, используя механизм полнотекстового поиска SQL.
Затем выполните запрос XML-значений, которые используют XML-индекс на XML-столбце.
Пример. Объединение полнотекстового поиска с xml-запросами
После создания полнотекстового индекса для XML-столбца следующий запрос проверяет, что название книги содержит слово «custom»:
SELECT *
FROM T
WHERE CONTAINS(xCol,'custom')
AND xCol.exist('/book/title/text()[contains(.,"custom")]') =1
Метод contains() использует полнотекстовый индекс для подмножества XML-значений, содержащих слово "custom" в любом месте документа. Условие exist() гарантирует, что слово "custom" встречается в названии книги.
Полнотекстовый поиск, использующий contains() и XQuery contains() имеет другую семантику. Во втором случае выполняется сопоставление подстрок, а в первом — сопоставление токенов с применением стемминга. Таким образом, если поиск предназначен для строки, в которой есть "run" в заголовке, совпадения будут включать "run", "runs" и "running", так как функции полнотекстового содержит() и Xquery содержит() удовлетворены. Однако запрос не соответствует слову "настраиваемая" в заголовке, так как полнотекстовое contains() терпит неудачу, а Xquery contains() удовлетворён. Как правило, для чистого соответствия подстроки необходимо удалить полное текстовое предложение contains().
Кроме того, полнотекстовый поиск использует нахождение корней слов, но XQuery содержит() — это точное совпадение. Это различие поясняет следующий пример.
Пример: полнотекстовый поиск по XML-значениям с использованием стемминга
Проверка XQuery содержит(), которая была выполнена в предыдущем примере, обычно не может быть исключена. Рассмотрим следующий запрос:
SELECT *
FROM T
WHERE CONTAINS(xCol,'run')
Слово «бежать» в документе соответствует условию поиска благодаря стеммингу. Кроме того, контекст поиска не проверяется с помощью XQuery.
При разложении XML на реляционные столбцы с помощью AXSD, которые полнотекстово индексированы, запросы XPath, происходящие в XML-представлении, не выполняют полнотекстовый поиск в основных таблицах.