redirect_to :future #思维驱动 » Blog Archive » 让ruby on rails的搜索插件 acts_as_ferret支持增量索引

让ruby on rails的搜索插件 acts_as_ferret支持增量索引

刚才写的丢了,重写一遍,

简单的说为什么要让acts_as_ferret支持增量呢?由于它本身只支持在activeRecord操作时才能增量而后台insert或是update的不能重新建立索引,另一方面呢,全量重新索引太慢了(在我的2G内存p805d cpu的机子上不到10万的记录跑了一个多小时)所以:

rails的插件acts_as_ferret支持增量索引.

def idx_create
Tname.find(:all, :conditions => “state=’I0A’”).each{|rec|
Tname.ferret_index << rec.to_doc
rec.state=’F0A’;
rec.save!
}
end
alias :idx_update :idx_create

Tname表示rails中的Model(就是你要用ferret索引的表名啦)
state是我用来保存记录是否已经索引的状态了。
idx_update就是update表用的。

删除的时候不能直接物理删除,而是要先设置state为删除状态(如:D0A)再使用
Tname.ferret_index.query_delete(query_for_self)
query_for_self表示查询出来的要删除的索引,由于删除在我的程序中用不到没有详细看,参见:acts_as_ferret/lib/instanse_method.rb中的156行。

ps:最近几台机子换着用,没用blog的客户端,刚刚写了半天没保存(一向我都很小心的今天不知道怎么回事了),竟然不小心按了CTRL-
R(vi中的撤消命令),竟然是刷新页面,第一次遇到这种情况(以前看人家blog上写到这种情况我还窃笑呢。。。)晕倒,不多写了贴贴代码就好了。

看完啦?再看看我们最近的10条记录对您是否有用呢?

要不,再找找其它内容:




或者给我们留下些意见、建议,这将给我们莫大的鼓励,促使我们做得更好。