Uso da pesquisa de texto completo¶
Você pode usar funções de pesquisa para encontrar dados de caracteres (texto) e endereços IP em colunas especificadas de uma ou mais tabelas, incluindo campos nas colunas VARIANT, OBJECT e ARRAY. Essa função pesquisa o texto em colunas ou cadeias de caracteres especificadas com base em uma lista de termos de pesquisa fornecidos. A função retorna TRUE se o texto corresponder aos termos de pesquisa especificados com base na semântica da pesquisa.
Na maioria dos casos, você chama a função SEARCH especificando-a na lista SELECT ou na cláusula WHERE de uma instrução SELECT. Se a função for usada como um filtro de cláusula WHERE, a consulta retornará linhas quando a função retornar TRUE.
A função SEARCH não requer configuração nem privilégios adicionais. Se estiver usando uma função que tenha privilégios para acessar os dados em uma coluna, você poderá pesquisar esses dados usando a função SEARCH.
As próximas seções contêm mais informações sobre a função SEARCH e sobre como otimizar o desempenho da consulta quando você a utiliza:
Uso da função SEARCH¶
A função SEARCH encontra dados de caracteres (texto) em colunas especificadas de uma ou mais tabelas, incluindo campos nas colunas VARIANT, OBJECT e ARRAY.
Quando você usa a função SEARCH, um analisador de texto divide o texto em tokens, que são unidades discretas, como palavras ou números. Um analisador padrão será aplicado se você não especificar um. O analisador extrai tokens dos termos de pesquisa e dos dados.
Se os tokens extraídos dos termos de pesquisa corresponderem aos tokens extraídos de uma coluna ou campo especificado de acordo com a semântica de pesquisa, a função retorna TRUE. O argumento de função SEARCH_MODE especifica um dos seguintes modos de pesquisa:
'OR'- A função usa semântica disjuntiva. Há uma correspondência se qualquer um dos tokens extraídos das colunas ou campos pesquisados corresponder a qualquer um dos tokens extraídos da cadeia de caracteres de pesquisa. Por exemplo, se o valorsearch_stringfor'blue red green', a função retornará TRUE para uma linha que contenhablueORredORgreenem qualquer uma das colunas ou campos pesquisados.'AND'- A função usa semântica conjuntiva. Há uma correspondência se os tokens extraídos de pelo menos uma das colunas ou campos pesquisados corresponderem a todos os tokens extraídos da cadeia de caracteres de pesquisa. Os tokens correspondentes devem estar todos em uma coluna ou campo, não em vários. Por exemplo, se o valorsearch_stringfor'blue red green', a função retorna TRUE para uma linha que contenhablueANDredANDgreenem pelo menos uma das colunas ou campos pesquisados.'PHRASE'- A função usa semântica de correspondência de frase. Há uma correspondência se os tokens extraídos de pelo menos uma das colunas ou campos pesquisados corresponderem a todos os tokens extraídos da cadeia de caracteres de pesquisa, incluindo a ordem e a adjacência dos tokens.A semântica de correspondência funciona como a semântica conjuntiva, exceto pelas seguintes diferenças:
A ordem dos tokens deve corresponder de forma exata. Por exemplo, se o valor
search_stringfor'blue,red,green', a função retornará FALSE parared,green,blue.Nenhum token adicional pode ser acrescentado aos dados de pesquisa. Por exemplo, se o valor
search_stringfor'blue,red,green', a função retornará FALSE parablue,yellow,red,green.
'EXACT'- A função usa semântica de correspondência exata. Há uma correspondência se os tokens extraídos de pelo menos uma das colunas ou campos pesquisados corresponderem exatamente a todos os tokens extraídos da cadeia de caracteres de pesquisa, incluindo os delimitadores.As regras de correspondência são as mesmas da semântica de pesquisa de frase, exceto pelas seguintes diferenças:
As cadeias de caracteres delimitadores entre os tokens devem corresponder de forma exata. Por exemplo, se o valor
search_stringfor'blue,red,green', a função retornará TRUE para uma linha que contenhablue,red,greenem pelo menos uma das colunas ou campos pesquisados. A função retorna FALSE para variações comoblue|red|greenoublue, red, green.Quando um delimitador é o primeiro ou o último caractere no valor
search_string, ele é tratado como um caractere na correspondência. Portanto, os delimitadores à esquerda e à direita do primeiro e do último delimitador podem resultar em uma correspondência. Por exemplo, se osearch_stringO valor é'[blue]', a função retornará TRUE parafoo [blue] bar,[[blue]]`e :code:`=[blue]., mas não para(blue)oufoo blue bar.
O exemplo a seguir procura a cadeia de caracteres snow leopard no texto leopard com o padrão SEARCH_MODE ('OR') e o analisador padrão:
SELECT SEARCH('leopard', 'snow leopard');
+-----------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD') |
|-----------------------------------|
| True |
+-----------------------------------+
O exemplo a seguir procura a cadeia de caracteres snow leopard no texto lion:
SELECT SEARCH('lion', 'snow leopard');
+--------------------------------+
| SEARCH('LION', 'SNOW LEOPARD') |
|--------------------------------|
| False |
+--------------------------------+
O exemplo a seguir procura a cadeia de caracteres snow leopard no texto leopard e especifica 'AND' para o argumento SEARCH_MODE:
SELECT SEARCH('leopard', 'snow leopard', search_mode => 'AND');
+---------------------------------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD', SEARCH_MODE => 'AND') |
|---------------------------------------------------------|
| False |
+---------------------------------------------------------+
Para obter mais informações sobre essa função e exemplos adicionais, consulte SEARCH.
Uso da função SEARCH_IP¶
A função SEARCH_IP encontra endereços IPv4 e IPv6 válidos em colunas de cadeias de caracteres especificadas de uma ou mais tabelas, incluindo campos nas colunas VARIANT, OBJECT e ARRAY. A pesquisa é baseada em um único endereço IP que você especifica. Se esse endereço IP corresponder exatamente a um endereço IP na coluna ou campo especificado, a função retornará TRUE.
O exemplo a seguir procura o endereço IP 10.10.10.1 no texto 192.0.2.146:
SELECT SEARCH_IP('192.0.2.146','10.10.10.1');
+---------------------------------------+
| SEARCH_IP('192.0.2.146','10.10.10.1') |
|---------------------------------------|
| False |
+---------------------------------------+
Para obter mais informações sobre essa função e exemplos adicionais, consulte SEARCH_IP.
Otimizar consultas que usam a função SEARCH¶
Para melhorar o desempenho das consultas que usam a função, você pode opcionalmente habilitar a otimização de pesquisa FULL_TEXT em uma coluna específica ou um conjunto de colunas em uma tabela. Quando você ativa a otimização de pesquisa, um novo caminho de acesso à pesquisa é criado e mantido.