我有一些红宝石类
class MyClass
include Tire::Model::Persistence
attr_accessor :date
mapping do
index_name Proc.new{|o| "my_class_#{o.date_index}" } # How to?
end
def initialize(d)
@date = d
end
def date_index
@date.strftime("%m%y")
end
end
初始化类后,如何动态设置index_name?
红宝石 (1.9.3)导轨(3.2.3)轮胎 (0.4.2)
对于许多边缘情况,这仍然是一个未解决的问题。有很多方法可以在 elasticsearch 中查看索引。
首先,完全可以像这样定义动态索引名称:
Article.index_name { "articles-#{Time.now.year}" }
请参阅 https://github.com/karmi/tire/blob/master/lib/tire/model/naming.rb#L10-35
其次,一种更灵活、更强大、更面向未来的方法是在 elasticsearch 中使用别名功能。
请参阅 https://github.com/karmi/tire/blob/master/test/integration/index_aliases_test.rb#L66 以获取有关可能性的灵感。
然后,创建类似索引别名mydocs_current
("虚拟索引")的东西,并将其指向特定的物理索引,例如mydocs_2012_06
。然后,在 cron 作业等中轮换此索引。
搜索时,您可以使用Tire.search
DSL,也可以即时将不同的索引/别名注入模型类中。