De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: João Batista Borges Neto
Data de Publicação: 23 de Abril de 2006
Para quem utiliza o MySQL em alguma aplicação e gostaria de prover ao seu sistema de busca operadores avançados para otimizar a sua expressão de busca, assim como os utilizados pelo sistema de busca do Google, aqui vai uma dica interessante.
A partir da versão 3.23.23 do MySQL, existe o suporte à busca full-text. A busca se dá em índices do tipo FULLTEXT, que podem ser dos tipos CHAR, VARCHAR ou TEXT.
Um índice FULLTEXT pode ser criado durante o CREATE TABLEou após com o **ALTER TABLE.
Uma busca full-text se dá através da função:
MATCH (col1,col2,...) AGAINST (expr [search_modifier])
Existem dois tipos de modificadores de busca que podem ser usados, IN BOOLEAN MODEe WITH QUERY EXPANSION. Na versão 5.1 do MySQL adicionaram suporte aos modos IN NATURAL LANGUAGE MODE e IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION mas ainda não tive acesso aos mesmos.
Nesta dica tratarei apenas do tipo IN BOOLEAN MODE no MySQL 4.x.
Uma busca full-text simples pode ser:
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database' IN BOOLEAN MODE)
Para 'title' e 'body' sendo campos da tabela 'articles', é necessário haver um índice FULLTEXT que contenha esses dois campos, e não possuir dois índices onde um possua o campo 'title' e o outro possua o 'body'. Aqui fiz testes no MySQL versão 4.0.25-standard e ocorre erro caso o índice não possua exatamente os campos descritos no MATCH.
Em uma busca full-text IN BOOLEAN MODE, você poderá usar alguns operadores de otimização, como o + (mais), - (menos), * (asterisco), "" (aspas), () (parênteses), <> (maior ou menor que) e ~ (til).
A função dos operadores é a de otimizar a expressão de busca, por exemplo, uma busca por casa* irá retornar resultados que contenham as palavras casa, casarão, casamento, etc. Assim como uma busca sendo feita por casa +azul, irá retornar as ocorrências que tiverem obrigatoriamente a palara azul e opcionalmente a palavra casa. E assim por diante.
Por default, o limite mínimo de caracteres de uma palavra buscada nesse modo é de 4. Mas que pode ser alterado pela variável ft_min_word_len, definindo-a no arquivo de configurações do MySQL (aqui no slackware linux está em /etc/my.cnf), na seção [mysqld].
Você pode visualizar o valor mínimo configurado no seu MySQL através do comando SHOW VARIABLES.
Para mais informações sobre o uso de buscas full-text, vá ao site do MySQL. Pesquisa Full-text no MySQL em Português, ou Full-Text Search Functionsem Inglês.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários