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.


MySQL Full-text Search in Boolean Mode

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.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de João Batista Borges Neto