1

TireとElasticSearchを使用しようとしているRubyonRails3.2アプリケーションがあります。

次の宣言を持つユーザーモデルがあります。

include Tire::Model::Search
include Tire::Model::Callbacks

次に、次のように呼び出して、ElasticSearchへのレコードの初期インポートを実行しました。

rake environment tire:import CLASS=User FORCE=true

1人のユーザーをスキップするように、インポートタスクをカスタマイズすることは可能ですか?インデックスに登録したくないシステムユーザーがいますか?

4

2 に答える 2

3

まず、Rakeタスクは、elasticsearch / Tire outなどを試す場合の、最も一般的な場合の便利な方法にすぎません。より複雑な状況では、独自のインデックスコードを作成する必要があります。これは非常に簡単です。

次に、レコードがインデックスに登録されているかどうかに関係なく特定の条件がある場合は、READMEの指示に従って実行する必要がありinclude Tire::Model::Callbacksます。たとえば、次のように、インデックス作成のライフサイクルを自分で管理しないでください。

after_save do
  update_index if state == 'published'
end
于 2012-11-14T08:20:06.923 に答える
1

私の問題に対する大まかな解決策を見つけたので、他の誰かがこれに遭遇した場合に備えて、何かを投稿したいと思いました. 誰かがより良い提案を持っている場合は、私に知らせてください。

最後に、通常の import all を呼び出してから、システム アカウントをインデックスから削除するタイヤ タスクを作成しました。

namespace :tire do
  desc 'Create search index on User'
  task :index_users => :environment do
    ENV['CLASS'] = 'User'
    ENV['FORCE'] = 'TRUE'
    Rake::Task['tire:import'].invoke
    @user = User.find_by_type('System')
    User.tire.index.remove @user
  end
end
于 2012-11-13T23:15:09.157 に答える