Domanda

Devo hackerare un sistema di gestione dei contenuti per supportare la ricerca completa di una lingua che contiene caratteri speciali. Questi sono archiviati nel database come entità HTML. Fuori dalla scatola, il CMS non lo supporta. Il bug è stato segnalato molto tempo fa, ma a quanto pare non ha priorità. Sono attenersi a questo CMS, il cliente è in attesa della mia soluzione, quindi devo hackerarlo. Dannazione...

OK ... i negozi CMS sono il contenuto traducendo caratteri speciali in entità HTML (questo è effettivamente fatto dall'editor bundled). Quindi la parola tedesca "Möchten" ottiene "Möchten" nel DB. Il CMS crea una stringa di query come

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

La tabella è di tipo Myisam, il campo ha un indice FullText.

Se usi "Möchten" come stringa di ricerca, MySQL corrisponderà a ogni pagina, come e è un operatore che farà cose folli se è presente nella stringa di ricerca. La ricerca non funzionerà.

La prossima idea è sostituire il carattere speciale da un * come segnaposto. Ma questo corrisponderà anche a diverse parole, non appena avrai qualcosa a partire da una "M" e un'altra parola seguente che termina con uno "chten". Non so perché, ma sostituendo solo l'Ampersand con un asterisco (quindi la ricerca di "M*ouml; chten") porterà anche a risultati simili.

Lo stesso problema è stato descritto qui.

Ok, gente, ho bisogno del tuo aiuto! Qualche idea?

Modificare: La conversione del contenuto in UTF-8 non è opzione.

Grazie!
Craesh

È stato utile?

Soluzione

Perché stai usando entità HTML? Basta passare a UTF8.

Altrimenti prova a citare ancora una volta la stringa di ricerca come ('"ricerca"').Purtroppo non funzionerà - http://bugs.mysql.com/bug.php?id=26265 C'è un bug a lungo sospeso. Immagino che l'unico approccio sia:

E l'ultimo approccio è quello di archiviare colonna aggiuntiva solo a scopo di ricerca con tutti gli accenti sostituiti.

Altri suggerimenti

È possibile utilizzare un motore di ricerca integrale. Apache Lucene è potente, ma un po 'difficile da imparare. Apache Solr è molto più facile da imparare e può essere abbastanza utile. Sfinge è noto per la sua facile integrazione con MySQL. Credo che tutti gestiscano bene l'internazionalizzazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top