Indexation de vos Models

Tout ce qui concerne les indexes pour vos models va dans la méthode define_index à l’intérieur de votre model.

  
class Article < ActiveRecord::Base
  # ...

  define_index do
    indexes subject, :sortable => true  
 indexes content  
 indexes author(:name), :as =&gt; :author, :sortable =&gt; true

has author\_id, created\_at, updated\_at  
 end

\# …  
end  

Les Champs

La méthode indexes ajoute un (ou plusieurs) champs, faisant référence à vos noms de colonne du model.

  
indexes content  

Gardez à l’esprit que si vous référencé une colonne qui partage son nom avec une méthode Ruby (comme par exemple id, name ou type), vous allez avoir besoin de le spécifier à l’aide d’un symbole.

  
indexes :name  

Cependant vous n’avez pas besoin de garder les mêmes noms que dans la base de données. Utilisez le mot clé :as pour signier l’alias.

  
indexes content, :as =&gt; :post  

Vous pouvez également définir un champ comme étant triable.

  
indexes subject, :sortable =&gt; true  

Si il y a des associations dans votre model, vous pouvez acceder aux autres colonnes. Un alias est obligatoirement requis quand on veux faire ça.

  
indexes author(:name), :as =&gt; :author  
indexes author.location, :as =&gt; :author\_location  

Les Attributs

La méthode has ajoute un (ou plusieurs) attributs, et tout comme la méthode indexes, celà nécessite le bon accord des noms de colonne du model.

  
has author\_id  

La syntaxe est très proche de la configuration des champs. Vous pouvez définir des alias, acceder aux associations. Cependant vous n’avez pas besoin de définir un attribut comme étant :sortable - dans Sphinx, tous les attributs peuvent être utilisés comme étant triable.

  
has tags(:id), :as =&gt; :tag\_ids  

Traitement des indexes

Une fois que vous avez configurés vos indexes comme vous le vouliez, vous pouvez lancer la tâche rake pour dire à Sphinx de traiter les données.

  
rake thinking\_sphinx:index  

Lorsque le model sera traité, vous verrez un message du type ci-dessous. C’est juste un avertissement, pas une erreur. Tout ira bien.

  
distributed index ‘article’ can not be directly indexed; skipping.  

Cependant, si vous faite une modification de structure à votre index (ce qui veux dire tout sauf l’ajout de données dans les tables de la base de données), vous aurez alors besoin d’arreter Sphinx, réindexer, et de le redémarrer.

  
rake thinking\_sphinx:stop  
rake thinking\_sphinx:index  
rake thinking\_sphinx:start