2009-04-15 17 views
5

Estoy usando Sphinx con el plugin Thinking Sphinx. He indexado un modelo llamado lugar con el siguiente código (y el rastrillo thinking_sphinx: comando de índice)Sphinx devuelve malos resultados de búsqueda

define_index do 
    indexes :name 
    indexes city 
    indexes zip 
end 

puedo obtener los resultados en mi controlador con este código:

@venues = Venue.search params[:search] 

y les generaría lo json. El problema que tengo es que cuando presiono esta URL:

http://localhost:3000/venue/list?search=Baltimo 

No obtengo nada. Pero cuando presiono esta URL:

http://localhost:3000/venue/list?search=Baltimor 

obtengo todas las sedes ubicadas en la ciudad de Baltimore. Por alguna razón, un personaje hace la diferencia. Teóricamente, debería obtener todas las Sedes en Baltimore si solo busco con un personaje - 'b'

¿Alguien sabe lo que está pasando aquí?

Gracias

Respuesta

6

A menos que tenga enable_star pone a 1 y min_prefix_len o min_infix_len puesto a 1 o más, no se va a B para que coincida con Baltimore (y aún así, creo que es necesario para buscar B * para obtener el partido).

lo que está sucediendo aquí es que, por defecto, Pensando Esfinge dice Sphinx utilizar un analizador lingüístico Inglés, lo que permite palabras similares (por caracteres, no por sentido) para ser considerados partidos, por lo que pone Baltimor y Baltimore en la misma canasta.

Si desea obtener cualquier parte de cualquier palabra que concordaba, entonces tienes que poner algo como lo siguiente en config/sphinx.yml:

development: 
    enable_star: 1 
    min_infix_len: 1 
test: 
    enable_star: 1 
    min_infix_len: 1 
production 
    enable_star: 1 
    min_infix_len: 1 

Entonces deja de Sphinx, volver a indexar, y reinicie Sphinx . Una vez que hayas hecho eso, entonces las búsquedas de B * deberían regresar a Baltimore.

Espero que esto ayude.

+0

dulce, acabo de encontrar eso en la documentación de la esfinge ... pero no pude encontrar dónde decía poner eso en el yml. ¡gracias! – Tony

+0

¿Hay alguna manera en la que no tengan que escribir un * al final? Al igual que la búsqueda, la madera levanta madera y madera sin tener que escribir madera * – Mike

+0

Gran respuesta. Para cualquiera que tropiece aquí, los detalles se encuentran en http://freelancing-god.github.com/ts/en/advanced_config.html. Una cosa a tener en cuenta es que establecer min_infix_len en 1 probablemente disminuirá el rendimiento. – dmonopoly

Cuestiones relacionadas