0

ルビーのクラスがあります

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を動的に設定するにはどうすればよいですか?

Ruby(1.9.3)Rails(3.2.3)タイヤ(0.4.2)

4

1 に答える 1

3

これは、多くのエッジケースで未解決の問題です。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ジョブなどでローテーションします。

検索するときは、DSLを使用するかTire.search、別のインデックス/エイリアス名をモデルクラスにオンザフライで挿入できます。

于 2012-06-07T09:44:14.960 に答える