2011-02-15 2 views
0

Modèle:Impossible de rechercher un index particulier

class TechRequest < ActiveRecord::Base 
... 
    define_index do 
    ... 
    indexes :hot_request 
    indexes :status_id, :as => :current_status_id 
    ... 
    has :hot_request , :as => :hot_request 
    set_property :delta => true 
    end 

DB:

hot_request - tinyint(1) 

Lorsque j'exécute le contrôleur code-

@query_string = '(@hot_request 1)(@current_status_id 1 | 2 | 3)' 
@tech_requests = TechRequest.search @query_string, :match_mode => :extended 

l'erreur suivante est générée en place:

ThinkingSphinx::SphinxError: index tech_request_core,tech_request_delta: query error: no field 'tech_hot_request' found in schema 
     from D:/Current/TechAssistTest/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/search.rb:392:in 'populate' 
     from D:/Current/TechAssistTest/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/search.rb:508:in 'call' 
     from D:/Current/TechAssistTest/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/search.rb:508:in 'retry_on_stale_index' 
     from D:/Current/TechAssistTest/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/search.rb:379:in 'populate' 
     from D:/Current/TechAssistTest/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/search.rb:167:in 'method_missing' 
     from D:/ruby/lib/ruby/1.8/irb.rb:302:in 'output_value' 
     from D:/ruby/lib/ruby/1.8/irb.rb:151:in 'eval_input' 
     from D:/ruby/lib/ruby/1.8/irb.rb:263:in 'signal_status' 
     from D:/ruby/lib/ruby/1.8/irb.rb:147:in 'eval_input' 
     from D:/ruby/lib/ruby/1.8/irb.rb:146:in 'eval_input' 
     from D:/ruby/lib/ruby/1.8/irb.rb:70:in 'start' 
     from D:/ruby/lib/ruby/1.8/irb.rb:69:in 'catch' 
     from D:/ruby/lib/ruby/1.8/irb.rb:69:in 'start' 
     from D:/ruby/bin/irb:13 

La recherche fonctionne correctement lorsque j'utilise hot_request en tant qu'attribut. La recherche fonctionne également très bien lorsque j'utilise @query_string = '(@current_status_id 1 | 2 | 3)'.

Répondre

0

Je viens de rencontrer des problèmes similaires - il y a deux raisons possibles pour lesquelles ces erreurs sont visibles. La première est que selon http://sphinxsearch.com/forum/view.html?id=2103 vous pouvez utiliser une colonne sql comme un champ ou un attribut mais pas les deux (sans le cloner). L'autre, qui m'a dérouté pendant un moment, est que vous pourriez avoir besoin de spécifier le type - donc si hot_request est réellement un entier, vous devez probablement avoir quelque chose comme

index hot_request: as => hr,: type =>: entier

ou vous obtenez ce message d'erreur cryptique

Hope this helps quelqu'un ...

Questions connexes