end
def has_any_from_source_with_label? index, source, label
query = { :source_id => source.id, :label => label, :limit => 1 }
- not Enumerable::Enumerator.new(index, :each_docid, query).map.empty?
+ not Enumerable::Enumerator.new(index, :each_id, query).map.empty?
end
opts = Trollop::options do
query += ' ' + opts[:query] if opts[:query]
parsed_query = index.parse_query query
- docs = Enumerable::Enumerator.new(index, :each_docid, parsed_query).map
- num_total = docs.size
+ ids = Enumerable::Enumerator.new(index, :each_id, parsed_query).map
+ num_total = ids.size
$stderr.puts "Found #{num_total} documents across #{source_ids.length} sources. Scanning..."
num_changed = num_scanned = 0
last_info_time = start_time = Time.now
- docs.each do |id|
+ ids.each do |id|
num_scanned += 1
m = index.build_message id
contacts.keys.compact
end
- def each_docid query={}
+ def each_id query={}
ferret_query = build_ferret_query query
results = @index_mutex.synchronize { @index.search ferret_query, :limit => (query[:limit] || :all) }
- results.hits.map { |hit| yield hit.doc }
- end
-
- def each_message query={}
- each_docid query do |docid|
- yield build_message(docid)
- end
+ results.hits.map { |hit| yield @index[hit.doc][:message_id] }
end
def optimize
unimplemented
end
- ## Yield each docid matching query
- def each_docid query={}
+ ## Yield each message-id matching query
+ def each_id query={}
unimplemented
end
- ## Yield each messages matching query
- def each_message query={}
- unimplemented
+ ## Yield each message matching query
+ def each_message query={}, &b
+ each_id query do |id|
+ yield build_message(id)
+ end
end
## Implementation-specific optimization step