Class: Ferret::Search::MultiTermQuery
- Defined in:
- lib/ferret/search/multi_term_query.rb
Overview
A Query that matches documents containing a subset of terms provided by a FilteredTermEnum enumeration.
MultiTermQuery
is not designed to be used by itself. The reason being that it is not intialized with a FilteredTermEnum enumeration. A FilteredTermEnum enumeration needs to be provided.
For example, WildcardQuery and FuzzyQuery extend MultiTermQuery
to provide WildcardTermEnum and FuzzyTermEnum, respectively.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#term ⇒ Object
readonly
Returns the value of attribute term.
Attributes inherited from Query
Instance Method Summary collapse
- #eql?(o) ⇒ Boolean (also: #==)
-
#get_term_enum(reader) ⇒ Object
Construct the enumeration to be used, expanding the pattern term.
- #hash ⇒ Object
-
#initialize(term) ⇒ MultiTermQuery
constructor
Constructs a query for terms matching
term
. - #rewrite(reader) ⇒ Object
-
#to_s(field = nil) ⇒ Object
Prints a user-readable version of this query.
Methods inherited from Query
#combine, #create_weight, #extract_terms, #merge_boolean_queries, #similarity, #weight
Constructor Details
#initialize(term) ⇒ MultiTermQuery
Constructs a query for terms matching term
.
15 16 17 18 |
# File 'lib/ferret/search/multi_term_query.rb', line 15 def initialize(term) super() @term = term end |
Instance Attribute Details
#term ⇒ Object (readonly)
Returns the value of attribute term.
12 13 14 |
# File 'lib/ferret/search/multi_term_query.rb', line 12 def term @term end |
Instance Method Details
#eql?(o) ⇒ Boolean Also known as: ==
53 54 55 56 57 58 |
# File 'lib/ferret/search/multi_term_query.rb', line 53 def eql?(o) if not o.instance_of? MultiTermQuery return false end return term == o.term end |
#get_term_enum(reader) ⇒ Object
Construct the enumeration to be used, expanding the pattern term.
21 22 23 |
# File 'lib/ferret/search/multi_term_query.rb', line 21 def get_term_enum(reader) raise NotImplementedError end |
#hash ⇒ Object
61 62 63 |
# File 'lib/ferret/search/multi_term_query.rb', line 61 def hash() return term.hash() end |
#rewrite(reader) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/ferret/search/multi_term_query.rb', line 26 def rewrite(reader) enumerator = get_term_enum(reader) bq = BooleanQuery.new(true) begin begin t = enumerator.term() if (t != nil) tq = TermQuery.new(t) # found a match tq.boost = boost() * enumerator.difference() # set the boost bq.add_query(tq, BooleanClause::Occur::SHOULD) # add to query end end while enumerator.next? ensure enumerator.close() end return bq end |
#to_s(field = nil) ⇒ Object
Prints a user-readable version of this query.
45 46 47 48 49 50 51 |
# File 'lib/ferret/search/multi_term_query.rb', line 45 def to_s(field = nil) buffer = "" buffer << "#{@term.field}:" if @term.field != field buffer << @term.text buffer << "^#{boost()}" if (boost() != 1.0) return buffer end |