Skip to content

Instantly share code, notes, and snippets.

@timothyklim
Created May 15, 2012 10:53
Show Gist options
  • Save timothyklim/2700807 to your computer and use it in GitHub Desktop.
Save timothyklim/2700807 to your computer and use it in GitHub Desktop.
elastic sample
class CreateCategories < ActiveRecord::Migration
def change
create_table :categories do |t|
t.string :name, null: false
t.integer :parent_id
t.timestamps
end
add_index :categories, :title
end
end
class Category < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
after_save do
update_index # Обновляем запись в elasticsearch при обновлении категории
end
mapping do
indexes :id, index: :not_analyzed, include_in_all: false # Включаем в выдачу но не учитываем при поиске
indexes :name, boost: 100, analyzer: 'snowball' # Тюнинг коэффициента boost и выбор движка для индексирования
end
def to_indexed_json
to_json only: [:id, :name] # Tire.rb экспортирует модель в JSON и отдает это elasticsearch. Указываем колонки модели(можно еще методы через methods: [...])
end
def self.search query # Метод который вызываем в контроллере и получаем результат.
self.tire.search load: true do
size 999999 # При использовании kaminari, tire.rb по-умолчанию делает пагинацию для метода paginate
query { string "*#{query}*", default_operator: 'AND' }
end
end
end
...
git 'git://github.com/karmi/tire.git' do
gem 'tire'
end
...
@timothyklim
Copy link
Author

чтобы проиндексировать(или RE) существующие записи, выполняем:

bundle exec rake environment tire:import CLASS=Category FORCE=YES

@timothyklim
Copy link
Author

Ссылка на сам гем http://karmi.github.com/tire/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment