Class: Sunspot::Query::Dismax
- Inherits:
-
Object
- Object
- Sunspot::Query::Dismax
- Defined in:
- sunspot/lib/sunspot/query/dismax.rb
Overview
Solr full-text queries use Solr’s DisMaxRequestHandler, a search handler designed to process user-entered phrases, and search for individual words across a union of several fields.
Instance Attribute Summary (collapse)
-
- (Object) minimum_match
writeonly
Sets the attribute minimum_match.
-
- (Object) phrase_slop
writeonly
Sets the attribute phrase_slop.
-
- (Object) query_phrase_slop
writeonly
Sets the attribute query_phrase_slop.
-
- (Object) tie
writeonly
Sets the attribute tie.
Instance Method Summary (collapse)
-
- (Object) add_boost_function(function_query)
Add a boost function.
-
- (Object) add_fulltext_field(field, boost = nil)
Add a fulltext field to be searched, with optional boost.
-
- (Object) add_highlight(fields = [], options = {})
Set highlighting options for the query.
-
- (Object) add_phrase_field(field, boost = nil)
Add a phrase field for extra boost.
-
- (Object) create_boost_query(factor)
Assign a new boost query and return it.
-
- (Boolean) has_fulltext_field?(field)
Determine if a given field is being searched.
-
- (Dismax) initialize(keywords)
constructor
A new instance of Dismax.
-
- (Object) to_params
The query as Solr parameters.
-
- (Object) to_subquery
Serialize the query as a Solr nested subquery.
Constructor Details
- (Dismax) initialize(keywords)
A new instance of Dismax
12 13 14 15 16 17 18 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 12 def initialize(keywords) @keywords = keywords @fulltext_fields = {} @boost_queries = [] @boost_functions = [] @highlights = [] end |
Instance Attribute Details
- (Object) minimum_match=(value) (writeonly)
Sets the attribute minimum_match
10 11 12 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 10 def minimum_match=(value) @minimum_match = value end |
- (Object) phrase_slop=(value) (writeonly)
Sets the attribute phrase_slop
10 11 12 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 10 def phrase_slop=(value) @phrase_slop = value end |
- (Object) query_phrase_slop=(value) (writeonly)
Sets the attribute query_phrase_slop
10 11 12 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 10 def query_phrase_slop=(value) @query_phrase_slop = value end |
- (Object) tie=(value) (writeonly)
Sets the attribute tie
10 11 12 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 10 def tie=(value) @tie = value end |
Instance Method Details
- (Object) add_boost_function(function_query)
Add a boost function
82 83 84 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 82 def add_boost_function(function_query) @boost_functions << function_query end |
- (Object) add_fulltext_field(field, boost = nil)
Add a fulltext field to be searched, with optional boost.
89 90 91 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 89 def add_fulltext_field(field, boost = nil) @fulltext_fields[field.indexed_name] = TextFieldBoost.new(field, boost) end |
- (Object) add_highlight(fields = [], options = {})
Set highlighting options for the query. If fields is empty, the Highlighting object won’t pass field names at all, which means the dismax’s :qf parameter will be used by Solr.
106 107 108 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 106 def add_highlight(fields=[], ={}) @highlights << Highlighting.new(fields, ) end |
- (Object) add_phrase_field(field, boost = nil)
Add a phrase field for extra boost.
96 97 98 99 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 96 def add_phrase_field(field, boost = nil) @phrase_fields ||= [] @phrase_fields << TextFieldBoost.new(field, boost) end |
- (Object) create_boost_query(factor)
Assign a new boost query and return it.
74 75 76 77 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 74 def create_boost_query(factor) @boost_queries << boost_query = BoostQuery.new(factor) boost_query end |
- (Boolean) has_fulltext_field?(field)
Determine if a given field is being searched. Used by DSL to avoid overwriting boost parameters when injecting defaults.
114 115 116 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 114 def has_fulltext_field?(field) @fulltext_fields.has_key?(field.indexed_name) end |
- (Object) to_params
The query as Solr parameters
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 23 def to_params params = { :q => @keywords } params[:fl] = '* score' params[:qf] = @fulltext_fields.values.map { |field| field.to_boosted_field }.join(' ') params[:defType] = 'dismax' if @phrase_fields params[:pf] = @phrase_fields.map { |field| field.to_boosted_field }.join(' ') end unless @boost_queries.empty? params[:bq] = @boost_queries.map do |boost_query| boost_query.to_boolean_phrase end end unless @boost_functions.empty? params[:bf] = @boost_functions.map do |boost_function| boost_function.to_s end end if @minimum_match params[:mm] = @minimum_match end if @phrase_slop params[:ps] = @phrase_slop end if @query_phrase_slop params[:qs] = @query_phrase_slop end if @tie params[:tie] = @tie end @highlights.each do |highlight| Sunspot::Util.deep_merge!(params, highlight.to_params) end params end |
- (Object) to_subquery
Serialize the query as a Solr nested subquery.
62 63 64 65 66 67 68 69 |
# File 'sunspot/lib/sunspot/query/dismax.rb', line 62 def to_subquery params = self.to_params params.delete :defType params.delete :fl keywords = params.delete(:q) = params.map { |key, value| "#{key}='#{escape_quotes(value)}'"}.join(' ') "_query_:\"{!dismax #{}}#{escape_quotes(keywords)}\"" end |