Partilhar via


Usar pesquisa de texto completo com colunas XML

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

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 tags de elemento são usadas como limites de token. São indexados os seguintes itens:

  • O conteúdo dos elementos XML.

  • O conteúdo dos atributos XML do elemento de nível superior apenas, a menos que esses valores sejam 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 SQL.

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

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

Uma pesquisa de texto completo que usa contains() e XQuery contains() tem semânticas diferentes. A última é uma correspondência de substring e a primeira é uma correspondência de token que usa derivação. Portanto, se a pesquisa for pela string que tem "run" no título, as correspondências incluirão "run", "runs" e "running", porque tanto o texto completo contains() quanto o XQuery contains() estão satisfeitos. No entanto, a consulta não corresponde à palavra "personalizável" no título, pois o contains() de texto completo falha, mas o XQuery contains() é satisfeito. Geralmente, para correspondência de substring pura, a cláusula de texto completo contains() deve ser removida.

Além disso, a pesquisa de texto completo usa derivação de palavras, mas XQuery contains() é uma correspondência literal. Esta diferença é ilustrada no exemplo seguinte.

Exemplo: Pesquisa de texto completo em valores XML usando derivação

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

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

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

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

Ver também