Domanda

Quali sono i limiti o i trucchi o gli antipatri o le insidie?

Sembra piuttosto attraente, apparentemente puoi creare un motore di ricerca quasi senza lavoro. Ma non può essere senza i suoi problemi ...

quali sono le tue esperienze?

È stato utile?

Soluzione

A mio avviso, il più grande svantaggio è che l'indicizzazione del testo completo di MySQL è limitata alle tabelle MyISAM. A differenza delle tabelle InnoDB, quelle mancano di molte funzionalità importanti, ad es. transazioni.

Altri suggerimenti

  

non può essere senza i suoi problemi ...

Certamente no!

Qualsiasi termine di ricerca composto esclusivamente da parole bloccate fallirà silenziosamente. Le parole possono essere bloccate a causa delle restrizioni sulla lunghezza min / max e / o sul file stopword.

Ho trovato il file stopword predefinito troppo aggressivo, impedendo molte ricerche valide. Inoltre, la lunghezza minima predefinita di 4 era molto frequente per gli acronimi che le persone potrebbero voler cercare. Ho ridotto ft_min_word_len a 3 e rimosso completamente l'elenco di stop (ft_stopword_file = ''). Doc: http://dev.mysql.com/doc /refman/5.1/en/fulltext-fine-tuning.html

Puoi anche esaminare la query di ricerca per vedere se contiene solo < parole di 4 lettere e in quel caso ricorrere a una ricerca LIKE. Non esiste un modo così semplice per aggirare la lista di arresto a livello di applicazione.

La selezione di & # 8216; caratteri word & # 8217; potrebbe non soddisfare le tue esigenze ed è difficile cambiare. Ad esempio, cercando & # 8220; Terry & # 8221; non corrisponderà a & # 8220; & # 8221 di Terry ;. In generale non esiste supporto per alcun tipo di derivazione, quindi & # 8220; biscotto & # 8221; non corrisponde a & # 8220; biscotti & # 8221; sia.

Infine, come cg menzionato, non c'è supporto per InnoDB. Al giorno d'oggi, non vuoi mettere tutti i tuoi dati in una tabella MyISAM.

Se hai l'archivio da risparmiare, quello che puoi fare è inserire la versione canonica principale dei dati in una tabella InnoDB, quindi creare una tabella MyISAM separata che contenga una copia del contenuto del freetext, da utilizzare come searchbait. Devi aggiornare entrambe le tabelle su una modifica, ma se la tabella MyISAM perde integrità, almeno perdi la possibilità di cercare tra le righe interessate, invece di confondere i dati reali in tempo reale e ottenere errori dell'applicazione.

È quindi possibile, se si dispone dei cicli di riserva, implementare la propria elaborazione del testo sull'esca di ricerca e interrogare le parole per aggirare alcune delle limitazioni di cui sopra. Ad esempio, puoi sfuggire ai caratteri che vuoi essere caratteri di parole, rimuovere i caratteri che non vuoi essere caratteri di parole ed eseguire un semplice inglese manuale.

Per le tabelle di grandi dimensioni, è necessario aumentare le dimensioni del buffer e il limite della cache nel file di configurazione di MySQL.

Anche le colonne MATCH () utilizzate nella ricerca devono essere le stesse delle colonne nell'indice.

Oltre all'ottima risposta di Bobince, c'è un articolo nella documentazione di MySQL che parla delle restrizioni del full-text. Spero che questo ti aiuti. http://dev.mysql.com/doc/refman/5.0 /en/fulltext-rest restrizioni.html (Olafur Waage ne ha già parlato in uno di questi)

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