2008-11-05 7 views
1

J'ai deux modèles indexés pour la recherche (utilisateur et article). Je suis en train de faire une recherche géo-différents modèles:Comment effectuer une géo-recherche de plusieurs modèles avec ThinkingSphinx?

ThinkingSphinx::Search.search('keywords', :geo => [ degrees_to_radians(params[:lat].to_f), degrees_to_radians(params[:lon].to_f) ], )

Mais je ne reçois une erreur:

Sphinx Error: index item_core,item_delta,user_core,user_delta: unknown latitude attribute ''

recherche chaque modèle fonctionne individuellement bien ... mais je Je ne sais pas quel est le problème ici. Voici les indices:

Index utilisateurs:

define_index do 
    indexes [:first_name, :last_name], :as => :name 
    indexes login 
    indexes email 
    indexes headline 
    indexes description 
    indexes business.name, :as => :business_name 
    indexes [addresses.street_1, addresses.street_2, addresses.city, addresses.postal_code], :as => :address 

    has created_at, :sortable => true 
    has addresses.latitude, :as => :latitude, :type => :float 
    has addresses.longitude, :as => :longitude, :type => :float  

    set_property :delta => true 
    end  

Indice d'objet:

define_index do 
    indexes title, :sortable => true 
    indexes description 
    indexes [address.street_1, address.street_2, address.city, address.postal_code], :as => :address 
    indexes images.title, :as => :image_titles 
    indexes images.description, :as => :image_descriptions 
    indexes categories(:name), :as => :category_names  

    has price, :sortable => true 
    has created_at, :sortable => true 
    has address.latitude, :as => :latitude, :type => :float 
    has address.longitude, :as => :longitude, :type => :float  
    has categories(:id), :as => :category_ids 

    where "`items`.`state` = 'for_sale'" 

    set_property :delta => true  
    end 

Répondre

3

C'est une réponse tardive, mais mieux que rien, je l'espère:

Lorsque vous êtes ne cherchant pas sur un modèle spécifique, Thinking Sphinx n'a pas de point de référence pour savoir quels attributs sont disponibles, vous devez donc lui indiquer explicitement les attributs lat et long à utiliser:

ThinkingSphinx::Search.search('keywords', 
    :geo => [ 
    degrees_to_radians(params[:lat].to_f), 
    degrees_to_radians(params[:lon].to_f) 
    ], 
    :latitude_attr => "latitude", 
    :longitude_attr => "longitude" 
) 
Questions connexes