Class: Ferret::Search::Spans::SpanOrQuery::SpanOrEnum
- Inherits:
-
Ferret::Search::Spans::SpansEnum
- Object
- Ferret::Search::Spans::SpansEnum
- Ferret::Search::Spans::SpanOrQuery::SpanOrEnum
- Defined in:
- lib/ferret/search/spans/span_or_query.rb
Instance Method Summary collapse
- #doc ⇒ Object
- #finish ⇒ Object
-
#initialize(query, reader) ⇒ SpanOrEnum
constructor
A new instance of SpanOrEnum.
- #next? ⇒ Boolean
- #skip_to(target) ⇒ Object
- #start ⇒ Object
- #to_s ⇒ Object
- #top ⇒ Object
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
#doc ⇒ Object
160 |
# File 'lib/ferret/search/spans/span_or_query.rb', line 160 def doc() top().doc() end |
#finish ⇒ Object
162 |
# File 'lib/ferret/search/spans/span_or_query.rb', line 162 def finish() top().finish() end |
#next? ⇒ 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 |
#start ⇒ Object
161 |
# File 'lib/ferret/search/spans/span_or_query.rb', line 161 def start() top().start() end |
#to_s ⇒ Object
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 |
#top ⇒ Object
134 |
# File 'lib/ferret/search/spans/span_or_query.rb', line 134 def top() return @queue.top() end |