2012-05-30 14 views
5

Sto ereditando un progetto che ha una ricerca elastica attraverso il pneumatico.Ignora gli accenti usando la ricerca elastica e il pneumatico

La ricerca sta funzionando, ma gli accenti sono disattivati. La ricerca di "questo" deve restituire "thís" e "thiš" ad esempio.

Ho letto questa documentazione pneumatici: http://karmi.github.com/tire/

Così come: http://railscasts.com/episodes/306-elasticsearch-part-1?view=asciicast

che menziona che la maggior parte delle opzioni di ricerca elastiche sono disponibili in gomma.

La ricerca per quanto riguarda gli accenti ignorando, asciifolding mantenuto fino a venire, ma elasticsearch solo ha questo da dire in proposito:

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

Inoltre ho trovato un paio di cose su filtri/accenti/etc come questi:

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

ma sono tutti nudi opzioni di ricerca elastiche utilizzando.

Quando provo a utilizzare un filtro di formattazione nel mio codice rubino, viene visualizzato un messaggio di errore su nessun filtro definito per "formattazione".

Ecco l'intestino della ricerca eseguita nel mio codice: come posso modificarlo per eseguire una ricerca non sensibile all'aspetto. Si tratta di un'asportazione temporanea e, in tal caso, come posso dichiararla qui?

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 

MODIFICA: O forse dovrebbe essere fatto nella mappatura/indicizzazione? E quindi rieseguire l'indicizzatore. Ecco la mappatura, ho provato a mettere: Filtro => "asciifolding" per alcuni degli indici, ma che non sembra funzionare (e non genera alcun output errore):

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 

risposta

3

C'è un esempio molto bello di "asciifolding" (rimozione degli accenti dai token durante l'indicizzazione del testo) in questo articolo: Autocomplete with Tire

Problemi correlati