Kouhei Sutou
kou****@clear*****
2012年 12月 19日 (水) 22:08:10 JST
須藤です。 In <CA+vp****@mail*****> "[groonga-dev,01138] 特定条件にマッチするレコードの一括削除" on Tue, 18 Dec 2012 10:03:02 +0900, ongaeshi <ongae****@gmail*****> wrote: > rroongaで特定の条件にマッチするレコードを削除する時、 > > def remove_match_path(path) > result = search(path) # 内部で Groonga::Table#select を呼んでレコードを抽出 > > result.each do |record| # 検索結果をeachで辿って・・ > @table[record.path].delete # Groonga::Recored#delete で削除 > end > end > > ・・という方法をとっていますが、数万オーダー位の > レコードを削除しようとすると時間がかかり困っています。 ですよね! > 少し調べてみた所、 > > groonga 1.2.9リリース > http://groonga.org/ja/blog/2011/12/29/release.html > > にて「レコードの一括削除に対応」というトピックを見つけました。 > > 紹介されていた「特定条件にマッチするレコードの一括削除」を > 【rroongaから】行うことは可能でしょうか? できません! なので、作ります! ↓こんな感じのものを作ると思います。 table.delete do |record| # table.selectと同じように条件を指定する end Cレベルでカーソルを回すのでRubyレベルでループを回してレコー ドを削除するよりも断然速くなると思います! -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/