2012-05-30 10 views
5

Estoy heredando un proyecto que tiene una búsqueda elástica a través del neumático.Ignore los acentos usando la búsqueda elástica y el neumático

La búsqueda está funcionando, pero acentúa todo. La búsqueda de "esto" debe devolver "thís" y "thiš", por ejemplo.

He leído esta documentación de los neumáticos: http://karmi.github.com/tire/

Así como: http://railscasts.com/episodes/306-elasticsearch-part-1?view=asciicast

que menciona que la mayoría de las opciones de búsqueda elástica están disponibles en los neumáticos.

La búsqueda en relación con acentos haciendo caso omiso, asciifolding seguía apareciendo, pero elasticsearch simplemente tiene que decir al respecto:

http://www.elasticsearch.org/guide/reference/index-modules/analysis/asciifolding-tokenfilter.html

Además me encontré con algunas cosas sobre filtros/acentos/etc como las siguientes:

https://github.com/elasticsearch/elasticsearch/issues/890
https://gist.github.com/2142635

Pero todos ellos están tomando opciones de búsqueda elásticas desnudas.

Cuando trato de usar un filtro plegable en mi código Ruby, aparece un error sobre la ausencia de un filtro definido para "asciifolding".

Aquí están las agallas de la búsqueda que se realiza en mi código: cómo puedo modificar esto para hacer una búsqueda insensible a los acentos. ¿Es afirmativo? Si es así, ¿cómo lo declaro aquí?

result = tire.search(:load => true,page: params[:page], per_page: params[:per_page]) do 
    query { string "#{params[:term]}", :default_operator => 'and' } if params[:term].present? 
    filter :missing, :field => 'original_media_id' #see above 
    #asciifolding? 
    sort { by :updated_at, :desc } if params[:term].present? 
    facet 'files' do 
    terms 'indexed_files.file.id' 
    end 
end 

EDITAR: ¿O quizás debería hacerse en el mapeo/indexación? Y luego vuelva a ejecutar el indexador. Aquí está la asignación, he intentado poner: filter => "asciifolding" a algunos de los índices, pero eso no parece funcionar (ni genera ninguna salida de error):

tire.mapping do 
    indexes :id, :index => :not_analyzed 
    indexes :name, :filter => "asciifolding" 
    indexes :description, :filter => "asciifolding" 
    indexes :created_at, :type => 'date' 
    indexes :updated_at, :type => 'date' 
    indexes :file_type 
    indexes :indexed_files, :type => 'object' do 
     indexes :file, :type => 'object', 
      :properties => { 
      :title => { 
      :type => "multi_field", 
       :fields => { 
       :raw => { :type => 'string', :index => 'not_analyzed'}, 
       :title => { :type => 'string', :filter => "asciifolding" } 
       } 
      }, 
      :description => { :type => "string", :filter => "asciifolding" } 
      } 
    end 
end 

Respuesta

3

Hay un ejemplo muy bueno de "asciifolding" (eliminar acentos de tokens al indexar texto) en este artículo: Autocomplete with Tire

Cuestiones relacionadas