2013-09-02 4 views
1

Я пытаюсь все решить эту проблему.Elasticsearch + Tire не игнорировать акценты

У меня есть простой рельс для приложения с поиском. Поиск работает отлично, когда я что-то ищу с акцентами, но если я ищу слово без акцентов, мои результаты пустые.

Я прочитал документацию о Тире и Elasticsearch, но я не знаю, что происходит

class Article < ActiveRecord::Base 
    attr_accessible :description, :title, :user_id 

    belongs_to :user 

    include Tire::Model::Search 
    include Tire::Model::Callbacks 

    mapping do 
    indexes :_id, index: :not_analyzed 
    indexes :title, analyzer: 'snowball', boost: 100 
    indexes :description, analyzer: 'snowball' 
    end 

    def self.search(params) 
    tire.search(page: params[:page], per_page: 10) do 
     query { string params[:q], default_operator: "AND" } if params[:q].present? 
    end 
    end 
end 

пыльник Я пытался использовать asciifolding но didn't работу.

class Article < ActiveRecord::Base 
    attr_accessible :description, :title, :user_id 

    include Tire::Model::Search 
    include Tire::Model::Callbacks 

    tire.settings :index => { 
     :analysis => { 
      :analyzer => { 
       :index_analyzer => { 
        :tokenizer => "whitespace", 
        :filter => ["asciifolding", "lowercase", "snowball"] 
       }, 
       :search_analyzer => { 
        :tokenizer => "whitespace", 
        :filter => ["asciifolding", "lowercase", "snowball"] 
       } 
      }, 
      :filter => { 
       :snowball => { 
        :type => "snowball", 
        :language => "Portuguese" 
       } 
      } 
     } 
    } 

    mapping do 
    indexes :_id, index: :not_analyzed 
    indexes :title, analyzer: 'snowball', boost: 100 
    indexes :description, analyzer: 'snowball' 
    end 

    def self.search(params) 
    tire.search(page: params[:page], per_page: 10) do 
     query { string params[:q], default_operator: "AND" } if params[:q].present? 
    end 
    end 
end 

Я использую Sense on Chrome для проверки, сопоставления и всей конфигурации в порядке!

Что происходит ???

Благодаря

ответ

0

Вы должны использовать анализатор вы укажете в индексе. Вы в настоящее время с помощью «снежного кома» анализатор для Вашего названия и описания, которое не выполняет asciifolding:

mapping do 
    indexes :_id, index: :not_analyzed 
    indexes :title, analyzer: 'snowball', boost: 100 
    indexes :description, analyzer: 'snowball' 
end 

ли это вместо

mapping do 
    indexes :_id, index: :not_analyzed 
    indexes :title, analyzer: :index_analyzer, boost: 100 
    indexes :description, analyzer: :index_analyzer 
end 

Предполагая, что вы хотите query_analyzer. Затем, когда вы хотите выполнить поиск, используйте другой анализатор:

Смежные вопросы