2009-04-17 14 views
7

Uso indici MySQL fulltext in un'applicazione Rails 2.3.2. Ho aggiunto l'indice tramite SQL nativo nella mia migrazione. Ma c'è un problema noto che causa problemi con lo schema.rb. Rails non comprende gli indici di testo completo e tenta di creare un indice normale. Ciò causerà un errore durante la creazione del database da schema.rb (ad esempio, test, specifiche, ecc):MySQL Indice fulltext con Rails 2.3.2 (problema di migrazione)

Mysql::Error: BLOB/TEXT column 'text' used in key specification without a key length: CREATE INDEX `fulltext_sms` ON `sms` (`text`) 

C'è un modo per risolvere questo problema in Rails 2.3.2 senza Rails scimmia-patching? E se no, qual è il modo migliore per affrontare questo?

Grazie!

La mia migrazione:

class FulltextIndexCustomersSmsMessage < ActiveRecord::Migration 
    def self.up 
    execute('ALTER TABLE sms ENGINE = MyISAM') 
    execute('ALTER TABLE customers ENGINE = MyISAM') 
    execute('CREATE FULLTEXT INDEX fulltext_sms ON sms (text(500))') 
    execute('CREATE FULLTEXT INDEX fulltext_customer ON customers (fullname(255))') 
    end 

    def self.down 
    execute('ALTER TABLE sms ENGINE = innodb') 
    execute('ALTER TABLE customers ENGINE = innodb') 
    execute('DROP INDEX fulltext_sms ON sms') 
    execute('DROP INDEX fulltext_customer ON customers') 
    end 
end 

schema.rb:

add_index "sms", ["text"], :name => "fulltext_sms" 

risposta

1

ne dite di usare uno dei motori di ricerca full-text che possono essere facilmente inserite nei Rails? Ti risparmia la fatica di fare tutto da solo con mysql. Due buone opzioni, che forniscono un sacco di personalizzazione, sono:

+0

buona idea, ma nel caso in cui voglio fare con questo me stesso, ciò che potrei fare? –

+0

con sfinge (che * è * un'ottima scelta se usato con TS) devi anche occuparti di mantenere il demone in esecuzione con un cron job e ricostruire gli indici. Ho intenzione di provare a utilizzare l'approccio nativo di MySQL su un piccolo progetto. –

Problemi correlati