Игнорировать акценты, используя поиск по эластичности и покрышку.

Я наследую проект, в котором есть эластичный поиск по шине.

Поиск работает, но акценты через него отключаются. Поиск «это» должен, например, вернуть «это» и «это».

Я прочитал эту документацию по шинам: http://karmi.github.com/tire/

А также: http://railscasts.com/episodes/306-elasticsearch-part -1?view=asciicast

В котором упоминается, что большинство опций эластичного поиска доступны в шине.

Поиск с игнорированием акцентов, asciifolding продолжал появляться, но эластичный поиск говорит об этом только следующее:

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

Кроме того, я нашел кое-что о фильтрах/акцентах/и т. д., например:

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

Но все они используют простые эластичные параметры поиска.

Когда я пытаюсь использовать фильтр asciifolding в своем коде ruby, я получаю сообщение об ошибке, что фильтр для asciifolding не определен.

Вот суть поиска, выполняемого в моем коде. Как мне изменить его, чтобы поиск не зависел от акцента. Это asciifolding, и если да, то как я могу объявить это здесь?

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

РЕДАКТИРОВАТЬ: Или, возможно, это следует сделать при отображении/индексации? Затем перезапустите индексатор.Вот сопоставление, я пытался добавить :filter => "asciifolding" к некоторым индексам, но это не сработало (и не выдало никаких ошибок):

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

5
задан Hsiu Dai 31 May 2012 в 22:00
поделиться