Class: Ferret::Index::MultiTermEnum

Inherits:
TermEnum
  • Object
show all
Defined in:
lib/ferret/index/multi_reader.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from TermEnum

#skip_to

Constructor Details

#initialize(readers, starts, t) ⇒ MultiTermEnum

Returns a new instance of MultiTermEnum.



196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/ferret/index/multi_reader.rb', line 196

def initialize(readers, starts, t)
  @queue = SegmentMergeQueue.new(readers.length)
  readers.each_index do |i|
    reader = readers[i]
    term_enum = nil
    if (t != nil) 
      term_enum = reader.terms_from(t)
    else
      term_enum = reader.terms()
    end
    smi = SegmentMergeInfo.new(starts[i], term_enum, reader)

    if (t == nil and smi.next?) or term_enum.term
      @queue.push(smi);          # initialize queue
    else
      smi.close()
    end
  end

  if (t != nil and @queue.size() > 0) 
    next?()
  end
end

Instance Attribute Details

#doc_freqObject (readonly)

Returns the value of attribute doc_freq.



194
195
196
# File 'lib/ferret/index/multi_reader.rb', line 194

def doc_freq
  @doc_freq
end

#termObject (readonly)

Returns the value of attribute term.



194
195
196
# File 'lib/ferret/index/multi_reader.rb', line 194

def term
  @term
end

Instance Method Details

#closeObject



243
244
245
# File 'lib/ferret/index/multi_reader.rb', line 243

def close()
  @queue.close()
end

#next?Boolean

Returns:

  • (Boolean)


220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
# File 'lib/ferret/index/multi_reader.rb', line 220

def next?()
  top = @queue.top()
  if (top == nil) 
    @term = nil
    return false
  end

  @term = top.term
  @doc_freq = 0

  while top and @term == top.term
    @queue.pop()
    @doc_freq += top.term_enum.doc_freq() # increment freq
    if (top.next?)
      @queue.push(top) # restore queue
    else
      top.close()     # done with a segment
    end
    top = @queue.top()
  end
  return true
end