¿Cómo geo-busco múltiples modelos con ThinkingSphinx?
-
06-07-2019 - |
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
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"
)