3

インデックス付き要素を編集する方法がわからないようです。グーグルも私に答えを与えません。それで、それが可能かどうかはわかりませんか?私が以前に行ったことは、全体のインデックスを再作成することだけですが、データが大きくなるにつれて、データはどんどん遅くなります。編集後に1つの要素だけを再インデックス化するにはどうすればよいですか。

これが私が今していることです。

def add_ele(ele)

    Tire.index ELE_INDEX do
        store :id => ele.ele_id, :title => ele.title, :tags => ele.tags, :itunes_description => ele.itunes_description

        refresh
    end
end

def delete_ele_index
    Tire.index ELE_INDEX do
        delete
    end
end

したがって、インデックス全体を削除し、データベース内のすべての要素をループして、それらを再度追加します。助けてくれてありがとう。

4

2 に答える 2

3

今後の参考のために、ここに更新の使用方法の完全な例があります

require 'tire'
require 'yajl/json_gem'

Tire.index 'articles' do
  delete
  create

  articles = [
    { :id => '1', :type => 'article', :title => 'one',   :tags => ['ruby']           },
    { :id => '2', :type => 'article', :title => 'two',   :tags => ['ruby', 'python'] },
    { :id => '3', :type => 'article', :title => 'three', :tags => ['java']           },
    { :id => '4', :type => 'article', :title => 'four',  :tags => ['ruby', 'php']    }
  ]

  Tire.index 'articles' do
    import articles
  end

  refresh

  Tire.index 'articles' do
    update 'article', 1, :doc => { :title => 'tone' }
  end

  refresh

  s = Tire.search 'articles' do
    query do
      string 'title:T*'
    end

    filter :terms, :tags => ['ruby']

    sort { by :title, 'desc' }
  end

  s.results.each do |document|
    puts "* #{ document.title } [tags: #{document.tags.join(', ')}]"
  end
end

gives

* two [tags: ruby, python]
* tone [tags: ruby]
于 2013-03-10T11:42:22.813 に答える
2

インデックスを削除する必要はありません。同じIDのドキュメントをもう一度保存すると、既存のドキュメントが更新されます。

更新APIもあります。これにより、いくつかのフィールドを変更するだけの場合に、ドキュメント全体を計算して転送する必要がなくなります。最も単純な形式では、更新する属性を含むハッシュを渡すだけです。次に例を示します。

update type, id, :doc => {:title => 'new title'}
于 2013-03-10T10:35:04.460 に答える