Rails4 - как настроить индексированные данные при индексации в Elastic Search с помощью SearchKick - PullRequest
0 голосов
/ 27 апреля 2018

Я недавно начал использовать ElasticSearch вместе с searchkick gem для индексации моих данных в БД. По умолчанию gem searchkick будет индексировать все столбцы модели, но я хочу индексировать только активные элементы (например, сообщения, которые опубликовано). Например -

#####in shop.rb

has_many :dealers
has_one :address
has_one :contact
...blah blah and more has many

###my index data


   def search_data
    { 
      ##XXXXXXXX  why cant i use this XXXXXXXXX
      ###active: true,
      name: name, index: "not_analyzed", 
      capacity: capacity.to_i,
      slug: slug,
      ### i need to add active to so that i can use where(:active => true) in search
      active: active,
      event_type_name: event_types.map(&:name),
      facility_name: facilities.map(&:name),
      ratings: ratings.map(&:stars),
      location: [self.address.latitude, self.address.longitude],
      picture_url: pictures.select{|p| p == pictures.last}.map do |i|{

        original:  i.original_url 

        }
      end
    }
  end

правильно ли приведенная выше индексация? Как я могу индексировать только те магазины, значение атрибута для которых равно true .?

1 Ответ

0 голосов
/ 27 апреля 2018

По документам: https://github.com/ankane/searchkick

Существует метод should_index?, который выглядит именно так, как вам нужно:

По умолчанию все записи проиндексированы. Чтобы контролировать, какие записи проиндексированы, используйте must_index? метод вместе с search_import Объем.

class Product < ApplicationRecord
  scope :search_import, -> { where(active: true) }

   def should_index?
     active # only index active records
   end
end
...