Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
É 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. As tags de elemento são usadas como delimitadores de token. Os seguintes itens são indexados:
O conteúdo dos elementos XML.
O conteúdo de atributos XML apenas do elemento de nível superior, a menos que esses valores sejam valores numéricos.
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: agrupar a pesquisa de texto completo com a 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 selecionar um subconjunto dos valores XML que contêm a palavra "personalizado" em qualquer parte do documento. A cláusula exist() garante que a palavra “personalizado” esteja presente 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 pela string que contém "run" no título, as correspondências incluirão "run", "runs" e "running", porque tanto o full-text contains() quanto a expressão XQuery contains() são satisfeitos. No entanto, a consulta não corresponde à palavra “personalizável” no título porque o texto completo contains() falha, mas o contains() do XQuery é atendido. Em geral, para correspondência exata de substring, a cláusula de texto completo contains() deve ser removida.
Além disso, a pesquisa de texto completo usa a lematização de palavras, mas o contains() do XQuery é uma correspondência literal. Essa diferença é ilustrada no próximo exemplo.
Exemplo: pesquisa de texto completo em valores XML ao usar lematização
Geralmente, a verificação contains() do XQuery executada no exemplo anterior não pode ser eliminada. Considere esta consulta:
SELECT *
FROM T
WHERE CONTAINS(xCol,'run');
A palavra "ran" no documento corresponde à critério de pesquisa por causa da lematização. Além disso, o contexto de pesquisa não é verificado ao usar XQuery.
Quando o XML é decomposto em colunas relacionais ao usar AXSD que são indexados em texto completo, as consultas XPath que ocorrem na exibição XML não executam a pesquisa de texto completo nas tabelas subjacentes.