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