Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Pesquisa de curinga na pesquisa de texto completo do MySQL


Infelizmente você não pode fazer isso usando um índice de texto completo do MySQL. Você não pode recuperar '*nited states' instantaneamente do índice porque os caracteres à esquerda são a parte mais importante do índice. No entanto, você pode procure 'United Sta*' .
// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)

O texto completo do MySQL tem melhor desempenho ao pesquisar palavras inteiras em frases - mesmo isso pode ser ruim às vezes. Caso contrário, sugiro usar um mecanismo de texto completo externo como Solr ou Sphinx . Eu acho que o Sphinx permite curingas de prefixo e sufixo, não tenho certeza sobre os outros.

Você pode voltar para o LIKE do MySQL cláusula, mas novamente, executando consultas como LIKE '%nited states' ou LIKE '%nited Stat%' , também sofrerá no desempenho, pois não pode usar o índice nos primeiros caracteres. 'United Sta%' e 'Unit%States' estão bem, pois o índice pode ser usado contra o primeiro grupo de caracteres conhecidos.

Outra advertência bastante importante usando a indexação de texto completo do MySQL é a lista de palavras de parada e configurações de comprimento mínimo de palavra . Por exemplo, em um ambiente de hospedagem compartilhada, você estará limitado a palavras maiores ou iguais a 4 caracteres. Portanto, pesquisar 'Goo' para obter 'Google' falharia. A lista de palavras irrelevantes também não permite palavras comuns como 'e', ​​'talvez' e 'fora' - na verdade, existem 548 palavras de parada todas juntas! Novamente, se não estiver usando hospedagem compartilhada, essas configurações são relativamente fáceis de modificar, mas se você estiver, ficará irritado com algumas das configurações padrão.