Support for unidirectional overlay on the bus / ElasticSearch

Cross mail from GitHub :

My search for link apps in various third-party services like Delicious, Twitter ... I have a base class:

class Link include Mongoid::Document include Tire::Model::Search include Tire::Model::Callbacks field :href, type: String field :name, type: String mapping do indexes :href, type: 'string', analyzer: 'url' indexes :name, type: 'string', analyzer: 'keyword', boost: 10 end end 

and the next class inherits from Link and adds two more fields:

 class Link::Delicious < Link field :tags, type: Array field :time, type: Time mapping do indexes :tags, type: 'string', analyzer: 'keyword' indexes :time, type: 'date' end end 

Searches will be performed through the base class: Link.search('google.com') . Is there a chance to get this job? Currently (optional) fields in Link::Delicious completely ignored by Tire / ElasticSearch.

+4
source share
1 answer

Fixed with replacement of the mapping method as follows:

 class Link # … class << self def mapping_with_super(*args, &block) # Creating only one index index_name('links') document_type('link') superclass.mapping_without_super.each do |name, options| indexes(name, options) end if superclass.respond_to?(:mapping) mapping_without_super(args, &block) end alias_method_chain :mapping, :super end end 
+4
source

Source: https://habr.com/ru/post/1387381/


All Articles