Class: Ferret::Index::MultipleTermDocPosEnum

Inherits:
TermDocEnum
  • Object
show all
Defined in:
lib/ferret/index/multiple_term_doc_pos_enum.rb

Overview

Describe class MultipleTermPositions here.

Author:

  • Anders Nielsen

Defined Under Namespace

Classes: TermPositionsQueue

Instance Method Summary collapse

Constructor Details

#initialize(reader, terms) ⇒ MultipleTermDocPosEnum

Creates a new MultipleTermPositions instance.



24
25
26
27
28
29
30
31
32
33
# File 'lib/ferret/index/multiple_term_doc_pos_enum.rb', line 24

def initialize(reader, terms)
  term_positions = []

  terms.each do |term|
    term_positions << reader.term_positions_for(term)
  end

  @tps_queue = TermPositionsQueue.new(term_positions)
  @pos_list = []
end

Instance Method Details

#closeObject



87
88
89
90
91
# File 'lib/ferret/index/multiple_term_doc_pos_enum.rb', line 87

def close()
  while (tps = @tps_queue.pop())
    tps.close()
  end
end

#docObject



79
80
81
# File 'lib/ferret/index/multiple_term_doc_pos_enum.rb', line 79

def doc() 
  return @doc
end

#freqObject



83
84
85
# File 'lib/ferret/index/multiple_term_doc_pos_enum.rb', line 83

def freq() 
  return @freq
end

#next?Boolean

Returns:

  • (Boolean)


35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/ferret/index/multiple_term_doc_pos_enum.rb', line 35

def next?
  return false if (@tps_queue.size == 0)

  @pos_list.clear()
  @doc = @tps_queue.top.doc

  tps = nil
  begin 
    tps = @tps_queue.top()

    tps.freq.times do |i|
      @pos_list << tps.next_position()
    end

    if tps.next?
      @tps_queue.adjust_top()
    else 
      @tps_queue.pop()
      tps.close()
    end
  end while (@tps_queue.size > 0 and @tps_queue.top.doc == @doc)

  @pos_list.sort!()
  @freq = @pos_list.size

  return true
end

#next_positionObject



63
64
65
# File 'lib/ferret/index/multiple_term_doc_pos_enum.rb', line 63

def next_position() 
  return @pos_list.shift()
end

#read(docs, freqs) ⇒ Object

Not implemented.

raises

NotImplementedError

Raises:

  • (NotImplementedError)


101
102
103
# File 'lib/ferret/index/multiple_term_doc_pos_enum.rb', line 101

def read(docs, freqs)
  raise NotImplementedError
end

#seek(term) ⇒ Object

Not implemented.

raises

NotImplementedError

Raises:

  • (NotImplementedError)


95
96
97
# File 'lib/ferret/index/multiple_term_doc_pos_enum.rb', line 95

def seek(term)
  raise NotImplementedError
end

#skip_to(target) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
# File 'lib/ferret/index/multiple_term_doc_pos_enum.rb', line 67

def skip_to(target)
  while (@tps_queue.top != nil and target > @tps_queue.top.doc) 
    tps = @tps_queue.pop()
    if (tps.skip_to(target))
      @tps_queue.push(tps)
    else
      tps.close()
    end
  end
  return next?
end