Índice de texto completo em uma coluna XML
É possível criar um índice de texto completo em colunas de XML que indexa o conteúdo dos valores de XML, mas ignora a marcação XML. Os valores dos atributos são indexados como texto completo a menos que sejam valores numéricos. Marcas de elemento são usadas como limites do token. Quando possível, você pode combinar pesquisa de texto completo com índice XML da seguinte maneira:
Primeiro, filtre os valores de XML de interesse usando a pesquisa de texto completo do SQL.
Em seguida, consulte esses valores de XML que usam o índice XML na coluna XML.
Exemplo: Combinando pesquisa de texto completo com consulta XML
Após o índice de texto completo ter sido criado na coluna XML, a seguinte consulta verifica se um valor XML contém as palavras "custom" no título de um manual:
SELECT *
FROM T
WHERE CONTAINS(xCol,'custom')
AND xCol.exist('/book/title/text()[contains(.,"custom")]') =1
O método contains() usa o índice de texto completo para subdividir os valores de XML que contêm a palavra "custom" em qualquer lugar do documento. A cláusula exist() garante que a palavra "custom" ocorre no título de um manual.
Uma pesquisa de texto completo que usa contains() e contains() do XQuery tem semânticas diferentes. O último é uma correspondência de subcadeia de caracteres e o anterior é uma correspondência de tokens que usa lematização. Portanto, se a pesquisa for para a cadeia de caracteres que contém "run" no título, as correspondências incluirão "run", "runs" e "running", porque tanto o contains() quanto o contains() do XQuery são atendidos. No entanto a consulta não corresponde à palavra "customizable" no título em que o contains() de texto completo falha, mas o contains() de XQuery é atendido. Geralmente, para correspondência pura de subcadeia de caracteres, a cláusula contains() de texto completo deve ser removida.
Além disso, a pesquisa de texto completo usa lematização de palavras, mas o contains() de XQuery é uma correspondência literal. Essa diferença é ilustrada no próximo exemplo.
Exemplo: Pesquisa de texto completo em valores de XML usando lematização
O contains() do XQuery que foi executado no exemplo anterior geralmente não pode ser eliminado. Considere esta consulta:
SELECT *
FROM T
WHERE CONTAINS(xCol,'run')
A palavra "ran" no documento corresponde ao critério de pesquisa por causa da lematização. Além disso, o contexto da pesquisa não é verificado usando XQuery.
Quando o XML é decomposto em colunas relacionais usando AXSD que são indexadas por texto completo, as consultas XPath que ocorrem sobre a exibição em XML não executam pesquisa de texto completo nas tabelas subjacentes.