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 => :author, :sortable => 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 => :post
Vous pouvez également définir un champ comme étant triable.
indexes subject, :sortable => 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 => :author
indexes author.location, :as => :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 => :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