/
lib_finder.rb
32 lines (29 loc) · 934 Bytes
/
lib_finder.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class LibFinder
include Sidekiq::Worker
sidekiq_options :queue => name.underscore
def perform(lib_id)
lib = Lib.find(lib_id)
mark_sources(lib)
mark_apks(lib)
end
def mark_sources(lib)
transform_proc = proc { |doc| doc[:lib] = lib.name; doc }
Source.index.reindex('sources', :transform => transform_proc) do
query do
boolean do
must { @value = { :wildcard => { :path => "#{lib.name.gsub(/\./, '/')}/*" } } }
must_not { term 'lib', lib.name }
end
end
end
end
def mark_apks(lib)
res = Source.tire.search(:per_page => 0) do
query { term 'lib', lib.name }
facet(:apk_eid) { terms :field => :apk_eid, :size => 10000000 }
end
apk_eids = res.facets['apk_eid']['terms'].map { |t| t['term'] }
Apk.where(:eid.in => apk_eids).add_to_set(:lib_names, lib.name)
self.update_attributes(:num_apks => lib.apks.count)
end
end