2015-03-19 2 views
0

Я использую ES и камень Searchkick для обработки запросов в моем приложении Rails. Я сейчас делаю:Оптимизация поиска в Rails 4

class Paper < ActiveRecord::Base 
    belongs_to :report 
    belongs_to :user 
    before_destroy :delete_dependant_papers 

    searchkick word_start: [:realname] 
end 

Это работает отлично, но это необязательно индексирование каждого столбца. Я хочу, чтобы он индексировал только столбец «realname».

Я наткнулся на search_data на странице Searchkick GitHub. Это позволяет мне индексировать только определенные столбцы:

class Product < ActiveRecord::Base 
def search_data 
    as_json only: [:name, :active] 
    # or equivalently 
    { 
     name: name, 
     active: active 
    } 
    end 
end 

Как бы объединить оба эти? Так что только 1 столбец индексируется с помощью realname и word_start?

+0

Итак, вы хотите индексировать 'realname' только, ничего другого? –

ответ

0

search_data метод позволит вам проиндексировать realname, а word_start позволит вам частично соответствовать вашим данным. Так что ваша модель должна выглядеть следующим образом:

class Paper < ActiveRecord::Base 
    belongs_to :report 
    belongs_to :user 
    before_destroy :delete_dependant_papers 

    searchkick word_start: [:realname] 

    def search_data 
    as_json only: [:realname] 
    end 
end 

Вы должны вызвать Paper.reindex в консоли после изменения search_data метода.