我的应用搜索各种第三方服务中的链接,如Delicious,Twitter ......我有以下基类:
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
并且以下类继承自Link
并添加了两个字段:
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
搜索将通过基类完成:Link.search('google.com')
。有没有机会让这个工作?目前,Link::Delicious
中的(附加)字段被Tire / ElasticSearch完全忽略。
答案 0 :(得分:4)
修复了覆盖mapping
方法的问题:
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