Pergunta

Eu tenho que invadir um sistema de gerenciamento de conteúdo para oferecer suporte à pesquisa completa de texto por um idioma que contém caracteres especiais. Estes são armazenados no banco de dados como entidades HTML. Fora da caixa, o CMS não a suporta. O bug foi relatado há muito tempo, mas aparentemente não tem prioridade. Estou cumprindo esse CMS, o cliente está aguardando minha solução, então tenho que invadir. Droga...

OK ... O CMS armazena seu conteúdo, traduzindo caracteres especiais em entidades HTML (isso é realmente feito pelo editor empacotado). Então a palavra alemã "Möchten" recebe "Möchten" no banco de dados. O CMS cria uma sequência de consulta como

SELECT * FROM `SiteTree` WHERE MATCH( Content ) AGAINST (<SEARCH_STRING> IN BOOLEAN MODE);

A tabela é do tipo myisam, o campo possui um índice de texto completo.

Se você usar "Möchten" como string de pesquisa, o MySQL corresponderá a todas as páginas, como & é um operador que fará coisas loucas se estiver presente na sequência de pesquisa. A pesquisa não funcionará.

A próxima idéia é substituir o personagem especial por um * como espaço reservado. Mas isso também corresponderá a várias palavras, assim que você tiver qualquer coisa começando com um "M" e outra palavra seguinte terminando com um "chten". Não sei por que, mas substituir apenas os ampeiros e um asterisco (procurar "m*ouml; chten") também levará a resultados semelhantes.

O mesmo problema foi descrito aqui.

Ok, pessoal, eu preciso da sua ajuda! Alguma ideia?

Editar: Converter o conteúdo para UTF-8 não é opção.

Obrigado!
Craesh

Foi útil?

Solução

Por que você está usando entidades HTML? Basta mudar para UTF8.

Caso contrário, tente citar sua string de pesquisa mais uma vez como ('"pesquisa"').Infelizmente não funciona - http://bugs.mysql.com/bug.php?id=26265 Há um bug longo. Eu acho que a única abordagem é:

E a última abordagem é armazenar coluna adicional apenas para fins de pesquisa com todos os sotaques substituídos.

Outras dicas

Você pode usar um mecanismo de pesquisa de texto completo. Apache Lucene é poderoso, mas um pouco difícil de aprender. Apache Solr é muito mais fácil de aprender e pode ser bastante útil. Esfinge é conhecido por sua fácil integração com o MySQL. Eu acredito que todos eles lidam bem com a internacionalização.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top