2010-06-30 13 views
6

Implementé la búsqueda de texto completo usando Sphinx y Thinking Sphinx. Quiero agregar una búsqueda en columnas. Algo así como :-(tomando un ejemplo de desbordamiento de pila)Cómo implementar la búsqueda como Stack Overflow

Suponga que desea ver programas de actividades relacionadas con el tipo que, simplemente:

user:me 

luego volverá un resultado con todas las preguntas y respuestas relacionadas a piemesons.

Si escribe

votes:15 

entonces devolverá un resultado con todas las preguntas etiquetadas con tener más de 15 votos.

Y si escribe

user:me votes:15 

luego volverá a todas las preguntas y respuestas que pertenecen a usted con más de 15 votos.

¿Cómo puedo implementar esto?

En este momento, los resultados de mi búsqueda se basan en la búsqueda de texto completo. ¿Cómo se pueden incluir estos tipos de características?

Cualquier opción disponible en Sphinx o Solr o en cualquier otro motor de búsqueda?

Respuesta

2

:with opción en thinking sphinx.

Antes que nada, debe definir esos atributos en su definición de índice (check out attributes section here).

has views_count, :as => :views, :type => :integer 
has user.id, :as => :user, :type => :integer 

Posteriormente, se podría buscar mensajes como este:

Post.search '', :with => {:views => 12..maxint, :user => User.first.id} 

(no estoy seguro si hay alguna posibilidad más elegante de dar rangos abiertos, pero 12..max_int debería ser suficiente)

Dos cosas importantes:

  1. si desea contar objetos relacionados (por ejemplo, respuestas), se debe utilizar la caché contador
  2. si su "usuario" es la asociación polimórfica, recomiendo "CRC32(CONCAT(user_type, user_id))" en lugar de user.id
Cuestiones relacionadas