Pregunta

He instalado Esfinge y Pensamiento-Sphinx hace unos días en mi rubí en los carriles 2.3.2, y una búsqueda básica funciona muy bien. Esto significa, sin ninguna condición. Ahora, quiero filtrar la búsqueda con algunas condiciones.

Tengo el modelo de anuncio, y el índice es el siguiente:

  define_index do
    indexes title, :as => :title, :sortable => true
    indexes description, :as => :description, :sortable => true
  end

Tal vez me equivoque, pero me di cuenta de que sólo cuando he añadido la sintaxis :sortable => true a estos atributos, que podría utilizar como condiciones en mi búsqueda. De lo contrario, no encontrará nada.

Ahora, también estoy usando acts_as_taggable_on plugin, que genera mis dos tablas db: etiquetas y marcaciones. No tengo un modelo para las etiquetas, acabo de acts_as_taggable_on :tags, :categories en mi modelo de anuncios.

Lo que me gustaría hacer ahora es filtrar por etiquetas. Por lo tanto, he intentado añadir a mi índice has tags(:id), :as => :tag_ids sin suerte, y también indexes tags(:id), :as => :tag_ids pero no funcionó bien.

¿Cómo puedo construir los índices para que pueda hacer algo como esto:

Announcement.search 'some word', :conditions => {:tag_ids => some_id}

Y también, que es la diferencia entre has y indexes

Gracias, Brian

¿Fue útil?

Solución

Permítanme responder a sus preguntas a la inversa. indexes whatever espera una cadena, esto es lo que esfinge buscará el texto que proporcione.

Por otro lado, has whatever no añade este contenido a los campos de búsqueda. Se espera que los números principalmente, porque se utiliza este material para la clasificación y filtrado después de la esfinge ya ha hecho la búsqueda.

Por último, creo que usted quiere has tags(:id), :as => :tag_ids en su modelo, y :with => {:tag_ids => some_id} en su búsqueda en lugar de utilizar :conditions. Condiciones se utilizan en los campos de texto que ha indexado, como una manera de realizar búsquedas de texto en los campos específicos en lugar de todos los campos indexados. Con se usa para filtrar los resultados utilizando los atributos que ha especificado con has whatever.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top