2010-01-15 5 views
0

Disons que je ne veux pas que le serveur VPS ou Dedicated Server soit nécessaire pour exécuter une indexation constante comme avec le plugin Thinking_Sphinx ou de nombreux autres plugins de recherche de texte intégral pour ruby ​​on rails.Rails: Recherche par catégorie sans FullText

J'ai un tas d'annonces dans la base de données avec un champ Nom et catégorie (entre autres choses).

Est-il possible de rechercher un nom dans une certaine catégorie sans avoir un plugin de recherche fulltext qui nécessite une indexation constante? et comment j'irais faire ça?

Merci. J'espère avoir été assez clair.

Répondre

0

Si vous souhaitez simplement rechercher une colonne spécifique (ou deux), vous pouvez certainement utiliser l'opérateur SQL LIKE.

Par exemple, en utilisant un named_scope dans des rails

class MyModel < ActiveRecord::Base 
    named_scope :search, lambda { |query| 
    { :conditions => ["category like ?", "%#{query}%"] } 
    } 
end 

Ensuite, dans vos contrôleurs, vous pourriez faire quelque chose comme

@search_results = MyModel.search(params[:query]) 

Il y a quelques inconvénients à cette approche:

  1. Vous ne recherchez qu'une seule colonne. Vous pouvez profiter de la nature dynamique de Ruby pour l'étendre à plusieurs colonnes, mais vous n'obtenez certainement pas l'avantage d'un index comme vous le feriez avec sphinx
  2. Cela fonctionnera bien pour les ensembles de données plus petits. Après avoir obtenu quelques milliers de lignes, vous allez commencer à avoir besoin de quelques stratégies d'indexation décentes pour rester aussi vite, sinon la recherche de cette façon va ralentir considérablement.

Espérons que cela aide. Si j'ai mal compris la question, faites le moi savoir.

+0

merci jerhine. Vous avez répondu à ce que je cherchais. Je comprends ce que vous dites et je vous remercie pour les inconvénients. Il m'est arrivé de trouver un épisode sur les recherches avancées qui m'a également aidé. http://railscasts.com/episodes/111-advanced-search-form – bob

Questions connexes