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

Inherits:
SpanQuery show all
Defined in:
lib/ferret/search/spans/span_or_query.rb

Overview

Matches the union of its clauses.

Defined Under Namespace

Classes: SpanOrEnum, SpanQueue

Instance Attribute Summary collapse

Attributes inherited from Query

#boost

Instance Method Summary collapse

Methods inherited from SpanQuery

#create_weight

Methods inherited from Query

#combine, #create_weight, #extract_terms, #merge_boolean_queries, #similarity, #weight

Constructor Details

#initialize(clauses) ⇒ SpanOrQuery

Construct a SpanOrQuery merging the provided clauses.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/ferret/search/spans/span_or_query.rb', line 6

def initialize(clauses) 
  super()

  # copy clauses array into an ArrayList
  @clauses = Array.new(clauses.length)
  @field = nil
  clauses.each_index do |i|
    clause = clauses[i]
    if i == 0 # check field
      @field = clause.field()
    elsif clause.field() != @field
      raise ArgumentError, "Clauses must have same field."
    end
    @clauses[i] = clause
  end
end

Instance Attribute Details

#fieldObject (readonly)

Returns the value of attribute field.



26
27
28
# File 'lib/ferret/search/spans/span_or_query.rb', line 26

def field
  @field
end

Instance Method Details

#clausesObject

Return the clauses whose spans are matched.



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

def clauses() @clauses end

#eql?(o) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


62
63
64
65
66
67
68
69
# File 'lib/ferret/search/spans/span_or_query.rb', line 62

def eql?(o) 
  return false if (o == nil or self.class() != o.class())

  return false if (@clauses != o.clauses)
  return false if (@field != o.field)

  return true
end

#hashObject



72
73
74
# File 'lib/ferret/search/spans/span_or_query.rb', line 72

def hash() 
  return @clauses.hash ^ @field.hash
end

#rewrite(reader) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/ferret/search/spans/span_or_query.rb', line 36

def rewrite(reader)
  clone = nil
  @clauses.each_index do |i|
    clause = @clauses[i]
    query = clause.rewrite(reader)
    if (query != clause) # clause rewrote: must clone
      if (clone == nil)
        clone = self.clone()
      end
      clone.clauses[i] = query
    end
  end
  if (clone != nil) 
    return clone                        # some clauses rewrote
  else 
    return self                         # no clauses rewrote
  end
end

#spans(reader) ⇒ Object



90
91
92
93
94
95
96
# File 'lib/ferret/search/spans/span_or_query.rb', line 90

def spans(reader)
  if (@clauses.size == 1)                      # optimize 1-clause case
    return @clauses[0].spans(reader)
  end

  return SpanOrEnum.new(self, reader) 
end

#termsObject



28
29
30
31
32
33
34
# File 'lib/ferret/search/spans/span_or_query.rb', line 28

def terms() 
  terms = []
  @clauses.each do |clause|
    terms += clause.terms
  end
  return terms
end

#to_s(field = nil) ⇒ Object



55
56
57
58
59
60
# File 'lib/ferret/search/spans/span_or_query.rb', line 55

def to_s(field = nil) 
  buffer = "spanOr(["
  buffer << @clauses.map {|c| c.to_s(field()) }.join(", ")
  buffer << "])"
  return buffer
end