Sphinx - Cuándo utilizar 'tiene' y '' índices para los campos
-
21-09-2019 - |
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
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
.