Укажите в Gemfil’е
gem 'elastic_meta_search', :git => 'git://github.com/at-consulting/elastic_meta_search'
Для корректной работы необходимо внести изменения в проект!
В bootstrap_and_overrides.ccs.less
:
@iconSpritePath: asset-path('twitter/bootstrap/glyphicons-halflings.png');
В application.js
:
//= require em_search
Важно расположение данного вызова! Если в application.js
файл, в котором идет обработка клика, вызывается раньше, чем em_search.js
, то работать не будет =)
Для расширенного поиска используется гем meta_search. Чтобы добавить отрисовку расширенного поиска, необходимо завести отдельный паршиал для него и вызвать хелпер search_bar
с ключом :meta_search
.
Параметры :meta_search
:
-
partial
-
render_opts
: данные для паршиала -
class
-
performed
: флаг, выставляющий иконку для уже отфильтрованной страницы
_Пример_:
search_bar meta_search:{ partial: "search", class: "buildings_adv_search", performed: @search.search_attributes.present? }
Если необходимо добавить JS на всплывающий поповер, то обработайте событие click
:
$(".meta-search-link.#{ Ваш класс кнопки }").on('click', function(){ // Необходимые JS // ... });
Для быстрого поиска используется гем tire.
Для корректного отображения управляющих элементов поиска и pop-over’а версия гема twitter-bootstrap-rails, использующаяся в проекте, должна быть не ниже 2.1.3
В application.css
:
*= require em_search/autocomplete
В app/controllers/application_controller.rb
:
skip_authorization_check :only => :fs enable_fast_search
В config/routes.rb
:
match '/fs' => "application#fs", as: :fs
В initializer’е (например, в config/initializers/elastic_meta_search.rb
) необходимо определить настройки индексирования для всех моделей (ВМЕСТО блока mapping
для каждой из моделей).
_Пример_:
ElasticMetaSearch.setup do |config| config.indexes = { Post => { name: { type: 'string' }, author: { type: 'string', type: 'snowball' } }, Author => { id: { type: 'integer' } } } end
Делать в моделях include
модулей Tire
НЕ требуется.
Построение логики поиска ложится на плечи разработчика системы.
Пример контроллера:
def index @search = Post.search params[:q] if params[:fs] if params[:fs][:term].blank? @posts = Post.all else term = "*#{params[:fs][:term]}*" @posts = Tire.search('posts', load: true, default_operator: 'AND') do query { string term } end.results end end @posts ||= @search.all end
В helper’е search_bar
можно указать необязательные параметры для быстрого поиска:
search_bar meta_search: { ... }, elastic_search: { ... }
Параметры elastic_search
:
-
index
: название индекса, в котором следует производить поиск (по умолчанию считается, что используется гем inherited_resources, и название индекса совпадает с названием таблицы, связанной с моделью, по которой осуществляется поиск) -
display
: список полей, совпадения по которым следует выводить в автокомплите (по умолчанию данный список содержит все проиндексированные поля)
_Пример_:
search_bar meta_search: { ... }, elastic_search: { index: "posts", display: ["name", "author"] }
_Пример_:
en: elastic_meta_search: posts: name: Название author: Автор
ru: elastic_meta_search: search: Найти searching: Поиск... change: Изменить параметры поиска advanced: Расширенный поиск en: elastic_meta_search: search: Search searching: Searching change: Change filters advanced: Advanced search