注意 update 回调有坑
我 monkey_patch 了一下 as_index_json, 省得重复写两遍。
class Elasticsearch::Model::Indexing::Mappings
def to_hash
{ @type.to_sym => @options.merge( properties: @mapping.as_json(except: :as) ) }
end
end
module Elasticsearch::Model::Serializing::InstanceMethods
def as_indexed_json(options={})
build_indexed_json(
target.class.mappings.instance_variable_get(:@mapping),
target,
{id: target.id.to_s}
).as_json(options.merge root: false)
end
private
def build_indexed_json(mappings, model, json)
return json unless model.respond_to? :[]
if model.kind_of? Array
build_array_json(mappings, model, json)
else
build_hash_json(mappings, model, json)
end
json
end
def build_array_json(mappings, model, json)
return json unless model.respond_to?(:[]) && json.kind_of?(Array)
model.each do |elem|
elem_json = if elem.kind_of? Array then [] else {} end
json << elem_json
build_indexed_json(mappings, elem, elem_json)
end
end
def build_hash_json(mappings, model, json)
return json unless model.respond_to?(:[]) && json.kind_of?(Hash)
mappings.each_pair do |field, option|
# Custom transformer
if option.has_key?(:as) && option[:as].kind_of?(Proc)
json[field] = target.instance_exec(get_field(model, field), &option[:as])
# A nested field
elsif option.has_key?(:properties)
json[field] = if get_field(model, field).kind_of? Array then [] else {} end
build_indexed_json(option[:properties], get_field(model, field), json[field])
# Normal case
else
json[field] = get_field(model, field)
end
end
end
def get_field(model, field_name)
model.try(:[], field_name) || model.try(field_name)
end
end
666
md5 这种应该叫摘要不能叫加密吧
liker liked article 必须关联上
测试环境数据库没有 id 为 1 的 liker 和 liked_article
滋呲
诶为什么是自由枪骑兵? 为什么不是自由枪兵?
但是手机的话用气来不方便,不能直接长按呼出扫码
Casterly Rock
#30 楼 @menghuanwd 不如你想一下?估算不是猜测,麻烦不要来抬杠。前提已经说了单个任务最多耗时 t,麻烦读一下。
#28 楼 @menghuanwd 按最大的估算
#26 楼 @darkbaby123 说的有道理,我这里给出的只是一个很粗糙的思路。对于具体的场景可以考虑的更精细。这里的本质应该是发现只需要猜测单一前置任务的执行时间,而不是所有前置任务的执行时间。
这个思路有趣!
#20 楼 @wpzero 对于发生错误的情况,需要保证 A 任务不重试,而是记录错误。sidekiq 使用 lpush 插入任务,brpop 弹出任务,所以一个队列中的任务是相对顺序执行的。当任务数远大于并发数是可以看做是顺序执行。 https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/client.rb#L199
👏
metabase +1. 记得用 docker.
喂,不要拖更啊。。。