Buenas gente, segunda vez que posteo una pregunta en la lista. Esta vez es
mas puntual (creo). Estamos trabajando en un proyecto y necesitabamos hacer
una busqueda de texto en la base de datos. Buscando nos encontramos con
Ferret y acts_as_ferret. Siguiendo la documentacion y los tutoriales en
internet tenemos el siguiente codigo:

Modelo:

class Item < ActiveRecord::Base
  ...
  acts_as_ferret :fields => [:title, :description]
  ...
end


En el controller

...
@items = Item.find_with_ferret params[:keyword]
...


La idea es que busque el keyword (texto) en el modelo Item por los campos
:title y :description. Haciendo solo eso no hemos conseguido una busqueda
que arroje resultados. Hemos probado de eliminar el index que crea para que
lo reconstruya pero sigue sin funcionar. En algunos caso pudimos obtener
resultados, pero luego deja de andar por algun motivo raro. La cuestion es
que renegamos mucho y la busqueda no anda bien, a veces funciona y a  veces
no.
Otra cosa que no pudimos resolver bien es el tema del score. El plugin tiene
dos metodos (ademas de otros) que agrega al modelo: uno es find_with_ferret
y el otro find_ids_with_ferret. El primero realiza la busqueda y arroja los
objetos que contienen el keyword, la otra en cambio retorna un array que
contiene el modelo donde se encontro el resultado, un campo data que no
sabemos que podria contener (siempre lo vimos vacio), el id del objeto y un
score. Estaria interesante poder usar el score, pero vimos que mucha gente
opta por realizar la busqueda con ferret de los ids, y luego buscar otra vez
los ids para obtener los datos. No nos parece muy correcto realizar una
doble busqueda ¿hay alguna forma de hacer que el plugin traiga el score de
los resultados o los datos que nos interesan para mostrar en los resultados,
sin hacer una doble busqueda?

Otra cosa que vemos es que la carpeta index la crea en un solo lado. Estamos
usando git en modo local y a mi compañero, al querer buscar y usar el plugin
no le crea el index en su copia local, sino que usa la mia. (el repositorio
y las copias locales estan en la misma maquina servidora), algo conflictivo,
porque usamos base de datos separadas a fin de no generar conflictos en los
archivos de sqlite entre pulls.

En fin, la pregunta es ¿esta bien lo que estamos haciendo o hay que
configurar mas el plugin y la gema y escribir algun codigo adicional? Nose
si alguien estuvo renegando con eso. Y por otro lado ¿es bueno usar ese
plugin para busqueda de texto en los modelos o hay algo mejor?

Cualquier consejo ayuda.
Gracias.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a