Pregunta

Tengo dos modelos indexados para la búsqueda (Usuario y Elemento). Estoy tratando de hacer una búsqueda geográfica en todos los modelos:

ThinkingSphinx :: Search.search ('palabras clave',: geo = > [    grados_a_radianes (parámetros [: lat] .to_f),    grados_a_radianes (parámetros [: lon] .to_f) ], )

Pero solo recibo un error:

Error de esfinge: índice item_core, item_delta, user_core, user_delta: atributo de latitud desconocido ''

Buscar cada modelo individualmente funciona bien ... pero no tengo idea de cuál es el problema aquí. Aquí están los índices:

Índice de usuario:

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    

Índice de elementos:

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
¿Fue útil?

Solución

Esta es una respuesta tardía, pero mejor que nada, con suerte:

Cuando no está buscando en un modelo específico, Thinking Sphinx no tiene un punto de referencia para saber qué atributos están disponibles, por lo que debe indicarle explícitamente los atributos largos y largos que debe usar:

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"
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top