Partilhar via


Procurar palavras que estejam perto de outra palavra com NEAR

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

Pode usar o termo de proximidade NEAR num predicado CONTÉM ou na função CONTAINSTABLE para procurar palavras ou frases próximas umas das outras.

Visão geral do NEAR

NEAR tem as seguintes características:

  • Você pode especificar o número máximo de termos não relacionados à pesquisa que separam o primeiro e o último termo de pesquisa.

  • Você pode pesquisar palavras ou frases em qualquer ordem, ou você pode procurar palavras e frases em uma ordem específica.

  • Pode especificar o número máximo de termos não pesquisáveis ou a distância máxima que separa o primeiro e o último termos de pesquisa para formar uma correspondência.

  • Se você especificar o número máximo de termos, também poderá especificar que as correspondências devem conter os termos de pesquisa na ordem especificada.

Para se qualificar como uma correspondência, uma cadeia de caracteres de texto deve:

  • Comece com um dos termos de pesquisa especificados e termine com um dos outros termos de pesquisa especificados.

  • Contêm todos os termos de pesquisa especificados.

  • O número de termos não pesquisados, incluindo palavras paradas, que ocorrem entre o primeiro e o último termos de pesquisa deve ser inferior ou igual à distância máxima, se a distância máxima for especificada.

Sintaxe de NEAR

A sintaxe básica de NEAR é:

 NEAR (  
  
 {  
  
 *search_term* [ ,...*n* ]  
  
 |  
  
 (*search_term* [ ,...*n* ] ) [, <maximum_distance> [, <match_order> ] ]  
  
 }  
  
 )  

Para obter mais informações sobre a sintaxe, consulte CONTÉM (Transact-SQL).

Exemplos

Exemplo 1

Por exemplo, você pode pesquisar por "John" dentro de dois termos de "Smith", da seguinte maneira:

... CONTAINS(column_name, 'NEAR((John, Smith), 2)')

Alguns exemplos de cordas que correspondem são "John Jacob Smith" e "Smith, John". A string "John Jones knows Fred Smith" contém três termos intervenientes que não são de pesquisa, por isso não corresponde.

Para exigir que os termos sejam encontrados na ordem especificada, você alteraria o termo de proximidade de exemplo para NEAR((John, Smith),2, TRUE). Isto procura por "John" dentro de dois termos de "Smith", mas apenas quando "John" precede "Smith". Em um idioma que lê da esquerda para a direita, como o inglês, um exemplo de uma cadeia de caracteres que corresponde é "John Jacob Smith".

Observe que, para um idioma que lê da direita para a esquerda, como árabe ou hebraico, o mecanismo de Full-Text aplica os termos especificados na ordem inversa. Além disso, o Pesquisador de Objetos no SQL Server Management Studio inverte automaticamente a ordem de exibição das palavras especificadas em idiomas da direita para a esquerda.

Exemplo 2

O exemplo a seguir pesquisa a tabela Production.Document do banco de dados de exemplo AdventureWorks para todos os resumos de documentos que contêm a palavra "refletor" no mesmo documento que a palavra "bracket".

SELECT DocumentNode, Title, DocumentSummary  
FROM Production.Document AS DocTable   
INNER JOIN CONTAINSTABLE(Production.Document, Document,  
  'NEAR(bracket, reflector)' ) AS KEY_TBL  
  ON DocTable.DocumentNode = KEY_TBL.[KEY]  
WHERE KEY_TBL.RANK > 50  
ORDER BY KEY_TBL.RANK DESC;  
GO  

Como é medida a distância máxima

Uma distância máxima específica, como 10 ou 25, determina quantos termos que não são de pesquisa, incluindo palavras paradas, podem ocorrer entre o primeiro e o último termos de pesquisa em uma determinada cadeia de caracteres. Por exemplo, NEAR((dogs, cats, "hunting mice"), 3) retornaria a seguinte linha, na qual o número total de termos que não são de pesquisa é três ("enjoy", "but" e "avoid"):

"Catsenjoyhunting mice``, but avoiddogs``."

O mesmo termo de proximidade não retornaria a seguinte linha, porque a distância máxima é excedida pelos quatro termos que não são de pesquisa ("enjoy", "but", "usually" e "avoid"):

"Catsenjoyhunting mice``, but usually avoiddogs``."

Combinar NEAR com outros termos

Você pode combinar NEAR com alguns outros termos. Você pode usar And (&), OR (|), ou AND NOT (&!) para combinar um termo de proximidade personalizado com outro termo de proximidade personalizado, um termo simples ou um termo de prefixo. Por exemplo:

  • CONTÉM('NEAR((term1, term2),5) E term3')

  • CONTÉM('NEAR((term1, term2),5) OU term3')

  • CONTÉM('NEAR((term1, term2),5) E NÃO term3')

  • CONTÉM('NEAR((term1, term2),5) E NEAR((term3, term4),2)')

  • CONTÉM('NEAR((term1, term2),5) OU NEAR((term3, term4),2, TRUE)')

Por exemplo

CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')  

Você não pode combinar NEAR com um termo de geração (ISABOUT ...) ou um termo ponderado (FORMSOF ...).

Mais informações sobre pesquisas de proximidade

  • Ocorrências sobrepostas de termos de pesquisa

    Todas as pesquisas de proximidade procuram sempre apenas ocorrências não sobrepostas. As ocorrências sobrepostas de termos de pesquisa nunca se qualificam como correspondências. Por exemplo, considere o seguinte termo de proximidade, que pesquisa "A" e "AA" nesta ordem com uma distância máxima de dois termos:

    CONTAINS(column_name, 'NEAR((A,AA), 2, TRUE)')
    

    As correspondências possíveis são "AAA", "A.AA", e "A..AA". Linhas contendo apenas "AA" não corresponderiam.

    Observação

    Você pode especificar termos que se sobrepõem, por exemplo, NEAR("mountain bike", "bike trails") ou (NEAR(comfort*, comfortable), 5). A especificação de termos sobrepostos aumenta a complexidade da consulta, aumentando as possíveis permutações de correspondência. Se você especificar um grande número desses termos sobrepostos, a consulta poderá ficar sem recursos e falhar. Se isso ocorrer, simplifique a consulta e tente novamente.

  • NEAR (independentemente de uma distância máxima ser especificada) indica a distância lógica entre termos, em vez da distância absoluta entre eles. Por exemplo, termos dentro de diferentes frases ou frases dentro de um parágrafo são tratados como mais distantes do que termos na mesma frase ou frase, independentemente de sua proximidade real, no pressuposto de que eles são menos relacionados. Da mesma forma, termos em diferentes parágrafos são tratados como estando ainda mais distantes. Se uma correspondência se estender até ao final de uma frase, parágrafo ou capítulo, a lacuna usada para classificar um documento será aumentada em 8, 128 ou 1024, respectivamente.

  • Impacto dos termos de proximidade na classificação pela função CONTAINSTABLE

    Quando NEAR é utilizado na função CONTAINSTABLE, o número de ocorrências em um documento em relação ao seu comprimento, bem como a distância entre o primeiro e o último termo de pesquisa em cada uma das ocorrências, afeta a classificação de cada documento. Para um termo de proximidade genérico, se os termos de pesquisa correspondentes estiverem >50 termos lógicos distanciados, a classificação retornada num documento será 0. Para um termo de proximidade personalizado que não especifica um inteiro como a distância máxima, um documento que contém apenas acertos cuja lacuna é >100 termos lógicos receberá uma classificação de 0. Para obter mais informações sobre como classificar pesquisas de proximidade personalizadas, consulte Limitar resultados de pesquisa com RANK.

  • A opção de servidor para transformar palavras de ruído

    O valor de transformar palavras de ruído afeta a forma como o SQL Server trata as palavras paradas se elas forem especificadas em pesquisas de proximidade. Para obter mais informações, consulte a opção de configuração de servidor transformação de palavras de ruído .

Ver também

CONTÉM (Transact-SQL)
CONTIDA (Transact-SQL)
Consulta com Full-Text Pesquisa