Compartilhar via


Usar Full-Text Pesquisa com Colunas XML

Você pode criar um índice de texto completo em colunas XML que indexa o conteúdo dos valores XML, mas ignora a marcação XML. As marcas de elemento são usadas como limites de token. Os seguintes itens são indexados:

  • O conteúdo dos elementos XML.

  • O conteúdo dos atributos XML somente do elemento de nível superior, a menos que esses valores sejam valores numéricos.

Quando possível, você pode combinar a pesquisa de texto completo com o índice XML da seguinte maneira:

  1. Primeiro, filtre os valores XML de interesse usando a pesquisa de texto completo do SQL.

  2. Em seguida, consulte os valores XML que usam o índice XML na coluna XML.

Exemplo: combinando pesquisa de texto completo com consulta XML

Depois que o índice de texto completo tiver sido criado na coluna XML, a consulta a seguir verifica se um valor XML contém a palavra "personalizado" no título de um livro:

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 subconjuntar os valores XML que contêm a palavra "custom" em qualquer lugar do documento. A cláusula exist() garante que a palavra "custom" ocorra no título de um livro.

Uma pesquisa de texto completo que usa contains() e XQuery contains() tem semânticas diferentes. Este último é uma correspondência de subcadeia de caracteres e o primeiro é uma correspondência de token que usa lematização. Portanto, se a pesquisa for pela cadeia de caracteres que tem "run" no título, os resultados incluirão "run", "runs" e "running", porque tanto a busca em texto completo contém() quanto o Xquery contains() são atendidos. No entanto, a consulta não corresponde à palavra "personalizável" no título em que o texto completo contém() falha, mas o Xquery contém() está satisfeito. Geralmente, para correspondência pura de subcadeias, a cláusula contains() de texto completo deve ser removida.

Além disso, a pesquisa de texto completo usa o leque de palavras, mas XQuery contém() uma correspondência literal. Essa diferença é ilustrada no próximo exemplo.

Exemplo: pesquisa de texto completo em valores XML usando o stemming

A verificação XQuery contém() que foi executada no exemplo anterior geralmente não pode ser eliminada. Considere esta consulta:

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

A palavra "executado" no documento corresponde à condição de pesquisa devido à recorrência. Além disso, o contexto de pesquisa não é verificado usando XQuery.

Quando o XML é decomposto em colunas relacionais usando a AXSD indexada por texto completo, as consultas XPath que ocorrem na exibição XML não executam a pesquisa de texto completo nas tabelas subjacentes.

Consulte Também

Índices XML (SQL Server)