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.
When you use the SEARCH function, a text analyzer breaks the text into tokens, which are discrete units of text, such as words or numbers. A default analyzer is applied if you don’t specify one. The analyzer extracts tokens from both the search terms and the data.
If tokens extracted from the search terms match tokens extracted from a specified column or field according to the search semantics, the function returns TRUE. The SEARCH_MODE function argument specifies one of the following search modes:
'OR'- The function uses disjunctive semantics. There is a match if any of the tokens extracted from the columns or fields being searched match any of the tokens extracted from the search string. For example, if thesearch_stringvalue is'blue red green', the function returns TRUE for a row that containsblueORredORgreenin any of the columns or fields being searched.'AND'- The function uses conjunctive semantics. There is a match if the tokens extracted from at least one of the columns or fields being searched matches all of the tokens extracted from the search string. The matching tokens must all be in one column or field; they can’t be spread across multiple columns or fields. For example, if thesearch_stringvalue is'blue red green', the function returns TRUE for a row that containsblueANDredANDgreenin at least one of the columns or fields being searched.'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 string de pesquisa, incluindo a ordem e a adjacência dos tokens.A semântica correspondente é a mesma semântica conjuntiva, exceto pelas seguintes diferenças:
A ordem dos tokens deve corresponder exatamente. Por exemplo, se o
search_stringO valor é'blue,red,green', a função retorna FALSE parared,green,blue.Nenhum token adicional pode ser acrescentado aos dados de pesquisa. Por exemplo, se o
search_stringO valor é'blue,red,green', a função retorna 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 string 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 strings delimitadoras entre os tokens devem corresponder exatamente. Por exemplo, se o valor de
search_stringé'blue,red,green', a função retorna TRUE para uma linha que contémblue,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
search_stringvalor, o delimitador é tratado como um caractere para correspondência. Portanto, os delimitadores à esquerda e à direita do primeiro e do último delimitadores 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.