2013-01-15 18 views
7

Ho un database MySQL (versione 5.5.28) con una tabella come questa:testo completo di ricerca con InnoDB in MySQL

products (InnoDB) 
------------------------------------------------- 
search_id  title    description 
1    Levi Blue Jeans  Some cool jeans 
2    Gucci Handbag  Great accessory 
3    Prada Dress   Beautiful dress 

voglio fare qualcosa di simile in MySQL:

SELECT MATCH(title) AGAINST ('Jeans') AS score, search_id, FROM search WHERE MATCH(title) AGAINST ('Jeans' IN BOOLEAN MODE) 

Per quanto ne so, puoi farlo solo su MyISAM. E 'possibile fare una ricerca simile con InnoDB senza ricorrere a cose come:

Per la mia domanda (circa 1000-2000) record Sfinge etc. sembra eccessivo. Ma anche ottenere ogni record in un array e cercare in esso con PHP sembra troppo. Ma forse non sei d'accordo.

PS. LIKE non sembra funzionare bene per me. I risultati sono in genere meno precisi e non è possibile ottenere un punteggio come è possibile con MATCH.

+0

Sembra che MySQL 6 supporti alcune [funzionalità fulltext] (http://www.drdobbs.com/database/full-text-search-with-innodb/231902587), ma potrebbe essere necessario utilizzare qualcos'altro nel frattempo. – jakerella

risposta

13

Duplica la colonna di testo da products a una nuova tabella MyISAM. Stabilire una relazione 1-1 tra i due e, per garantire l'ACID fornito da InnoDB, assicurarsi di accedere sempre alla tabella MyISAM insieme a products.

È possibile aggiungere trigger su products per mantenere la biiezione. È anche possibile creare una vista in modo che la rilavorazione sia minima nell'applicazione quando si esegue l'aggiornamento a MySQL v5.6 (e rilasciare questa soluzione contorta).

Qui è the full monty.

Invece di copiare la colonna di testo, è possibile spostarla del tutto (eliminarla da products, ovvero). Questo sarebbe più efficiente, ma renderebbe anche un po 'più complicato passare a una soluzione solo InnoDB quando si ha voglia di aggiornare.

+0

Bel esempio di SQL Fiddle. – Wolf

+0

soluzione super facile per una domanda complicata. funziona come un fascino. :) – kishu27

Problemi correlati