2010-04-11 13 views
7

¿Es posible indexar a través de una asociación con Sunspot?Búsqueda de texto a la mancha solar/Solr - cómo indexar asociaciones de carriles

Por ejemplo, si un cliente tiene_muchos contactos, quiero un bloque de 'búsqueda' en mi modelo de cliente que indexa las columnas Contact # first_name y Contact # last_name para usar en las búsquedas en Customer.

acts_as_solr tiene una opción: include para esto. Simplemente he estado combinando los nombres de columna asociados en un campo de texto en Cliente como se muestra a continuación, pero esto no parece muy flexible.

searchable do 
text :organization_name, :default_boost => 2 
text :billing_address1, :default_boost => 2 
text :contact_names do 
    contacts.map { |contact| contact.to_s } 
end 

¿Alguna sugerencia?

+0

¿Sabes cómo impulsarías contact_names? – chodorowicz

+0

texto: contact_names, default_boost: => 2 – brupm

+0

relacionada pregunta de seguimiento: asociaciones Cómo no volver a la consulta: http://stackoverflow.com/questions/12516281/not-re-querying-has-and -belongs-to-many-associations – Anno2001

Respuesta

6

Eso es exactamente cómo hacerlo. Solr está esencialmente orientado a documentos, por lo que cualquier información que provenga de asociaciones en su base de datos se aplana en su documento. Una opción: incluir es simplemente azúcar suave que termina haciendo lo mismo que haces aquí.

+0

Interesante, eso es lo que yo pensaba. Siguiendo con el mismo ejemplo, ¿puedo ordenar el resultado del Cliente establecido por Contact # last_name de alguna manera? – Sam

+0

¿La opción: incluir agiliza las cosas? Gracias – brupm

0

Claro:

searchable do 
    string :sort_contact_name do 
    contacts.map { |contact| contact.last_name }.sort.first 
    end 
end 

A continuación, se puede ordenar por el: sort_contact_name campo. Tenga en cuenta que tuve que reducir el conjunto de nombres de contactos a un solo nombre, ya que Solr solo puede ordenar en campos que tienen un único valor por documento (lo cual tiene sentido cuando lo piensa).

Cuestiones relacionadas