Class: Ferret::Search::Spans::SpanOrQuery::SpanOrEnum

Inherits:
Ferret::Search::Spans::SpansEnum show all
Defined in:
lib/ferret/search/spans/span_or_query.rb

Instance Method Summary collapse

Constructor Details

#initialize(query, reader) ⇒ SpanOrEnum

Returns a new instance of SpanOrEnum.



99
100
101
102
103
104
# File 'lib/ferret/search/spans/span_or_query.rb', line 99

def initialize(query, reader)
  @query = query
  @queue = SpanQueue.new(query.clauses.size)
  @all = query.clauses.map {|c| c.spans(reader)}
  @first_time = true
end

Instance Method Details

#docObject



160
# File 'lib/ferret/search/spans/span_or_query.rb', line 160

def doc() top().doc() end

#finishObject



162
# File 'lib/ferret/search/spans/span_or_query.rb', line 162

def finish() top().finish() end

#next?Boolean

Returns:

  • (Boolean)


106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/ferret/search/spans/span_or_query.rb', line 106

def next?
  if (@first_time) # first time -- initialize
    @all.delete_if do |spans|
      if (spans.next?) # move to first entry
        @queue.push(spans) # build queue
        next false
      else 
        next true
      end
    end
    @first_time = false
    return @queue.size() != 0
  end

  if @queue.size == 0 # all done
    return false
  end

  if top().next? # move to next
    @queue.adjust_top()
    return true
  end

  @all.delete(@queue.pop()) # exhausted a clause

  return @queue.size() != 0
end

#skip_to(target) ⇒ Object



136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/ferret/search/spans/span_or_query.rb', line 136

def skip_to(target)
  if (@first_time) 
    @all.delete_if do |spans|
      if (spans.skip_to(target)) # skip each spans in all
        @queue.push(spans) # build queue
        next false
      else 
        next true
      end
    end
    @first_time = false
  else 
    while (@queue.size != 0 and top().doc < target) 
      if (top().skip_to(target)) 
        @queue.adjust_top()
      else 
        @all.delete(@queue.pop())
      end
    end
  end

  return @queue.size() != 0
end

#startObject



161
# File 'lib/ferret/search/spans/span_or_query.rb', line 161

def start() top().start() end

#to_sObject



164
165
166
167
168
169
170
171
172
# File 'lib/ferret/search/spans/span_or_query.rb', line 164

def to_s() 
  buffer = "spans(#{@query})@"
  if @first_time
    buffer << "START"
  else
    buffer << (@queue.size>0 ? ("#{doc}:#{start()}-#{finish}") : "END")
  end
  return buffer
end

#topObject



134
# File 'lib/ferret/search/spans/span_or_query.rb', line 134

def top() return @queue.top() end