ho requisito come di seguitomodo migliore per ottimizzare interrogazione durante la ricerca della stringa in grandi frasi
poesia appartiene al poeta
poeta ha molte poesie
Se l'utente alla ricerca di parola "ruby "
Dovrebbe dare,
Numero totale di volte in cui la parola rubino è usata in tutte le poesie.
Mostra tutte le poesie che hanno la parola rubino.
Numero di volte in cui la parola rubino è usata in ogni poesia.
Il numero totale di poeti utilizzava la parola rubino.
Numero totale di volte in cui ogni poeta utilizzava la parola ruby.
Quindi la mia domanda nel modello di Poema è qui
poems= where("poem_column like ?", "%#{word}%")
@results = {}
poems.each do |poem|
words = poem.poem_column.split
count = 0
words.each do |word|
count += 1 if word.upcase.include?(word.upcase)
end
@results[poem] = count # to get each poem using word ruby
end
E per ottenere contare poeti nel Poema modello
@poets = poems.select("distinct(poet_id)")
@poets.each do |poet|
@poets_word_count << poems.where("poet_id = #{poem.poet_id}").count
end
Dove poesie sono circa 50k. sta prendendo quasi più di 1 minuto. So che sto facendo nel modo sbagliato ma non sono riuscito a ottimizzarlo in nessun altro modo.
penso che le righe sottostanti impiegano troppo tempo mentre avvolgono ogni parola di tutte le poesie.
words.each do |word|
count += 1 if word.upcase.include?(word.upcase)
end
Può qualcuno di voi mi mostra il modo per ottimizzare it.As mancanza di conoscenza nelle query non potevo farlo in qualsiasi altro modo.
Grazie in anticipo
sai dove ti prendi più tempo: ottenere i poeti? ottenere il numero di occorrenze per la parola cercata all'interno di poem_column? – juanpastas
Entrambi richiedono tempo ma ricercano la parola all'interno di poem_column prendendo di più. [Colonna poesia contiene fino a 20 righe] – devudilip
Considera l'utilizzo di [Ricerca testo completo SQLite3] (http://www.sqlite.org/fts3.html). –