2010-03-26 12 views
8

No he implementado una función de búsqueda antes y me siento un poco atascado. Tengo una función de búsqueda de manchas solares que encuentra resultados basados ​​en palabras clave, esto funciona muy bien, pero ahora quiero implementar la función de facetas de selección múltiple, pero ni siquiera puedo encontrar la manera de configurar una búsqueda de facetas básica.¿Cómo configuro una búsqueda de facetas con una relación de muchos a muchos usando Sunspot?

que tienen una relación muchos a muchos (en los carriles no en la vida real):

Personas de la clase has_many: habilidades,: a través de => experiencia (y viceversa, etc.)

Class People < ActiveRecord::Base 
    has_many :skills, :through => experience 

    searchable do 
    text :first_name, :surname 
    end 
end 

En el Controlador

@search = Sunspot.search(People) 
    facet :skill_ids 
end 

Este es el ejemplo básico en el que no puedo trabajar. Se genera este error:

Sunspot::UnrecognizedFieldError: No field configured for People with name 'skill_ids' 

¿Cómo se crea el enlace a: skill_ids

Creo que debe faltar alguna referencia en el modelo - pero no hay ejemplos que puedo encontrar no hacer referencia a los ID de una relación. La mayoría de los ejemplos que encontré usan columnas que ya están en ese modelo cuando se usa la funcionalidad faceta.

  • ¿Cómo puedo lograr que funcione la implementación básica?
  • ¿Cómo usar esto en la vista? ¿Tengo que llamar a hits.facet e iterar sobre las habilidades? ¿Cómo se vería el código para mostrar esto?
  • ¿Cómo seleccionaría múltiples facetas para buscar?
  • ¿Debería poner esto en el wiki de la comunidad?

¡Gracias por su tiempo!

Respuesta

13

Cualquier cosa que quiera filtrar, facetar o encargar, Sunspot necesita saber. Entonces en su modelo:

searchable do 
    text :first_name, :surname 
    integer :skill_ids, :multiple => true, :references => Skill 
end 

Su llamada #search en su controlador se ve bien. En su opinión, ¿que haría algo como lo siguiente:

- @search.facet(:skill_ids).rows.each do |row| 
    = row.instance.name 

row.instance devolverá la instancia de Habilidad que el valor de la fila se refiere a (eso es lo que la opción :references está haciendo en la definición searchable).

no estoy seguro de lo que entendemos por "seleccionar múltiples facetas de búsqueda por" - uno puede generar múltiples facetas (que dan a los usuarios opciones para un mayor refinamiento de búsqueda) llamando a los facet método varias veces en una búsqueda ; y luego puede usar sus opciones de facetas con restricciones de alcance usando el método with, que también puede llamar tantas veces como desee.

Hablando de wikis, la mayor parte de esta información está disponible (con más explicaciones) en el wiki de la mancha solar:

+1

Gracias! No pude encontrar una referencia a: la parte múltiple en la wiki o en cualquier otro lugar; debe haber estado usando términos de búsqueda erróneos o algo así. Tiene la idea correcta de lo que quise decir con "seleccionar múltiples facetas para buscar por" - en otras palabras: filtrando por selecciones múltiples. ¡El wiki ahora tiene sentido para mí con una demostración en funcionamiento para probar! Voy a tratar de agregar en la siguiente funcionalidad de filtrado: ¿Tendría razón al pensar que puedo crear un link_to y pasar parámetros para facetas adicionales, o es un largo camino por recorrer? ¡Gracias de nuevo! –

Cuestiones relacionadas