Custom Filters Score
Author: Jerry Luk <jerryluk@gmail.com>
Adds support for "#custom_filters_score" queries in Tire DSL.
It hooks into the Query class and inserts the #custom_filters_score query types.
Usage:
Require the component:
require 'tire/queries/custom_filters_score'
Example:
Tire.search 'articles' do query do custom_filters_score do query { term :title, 'Harry Potter' } filter do filter :match_all boost 1.1 end filter do filter :term, :author => 'Rowling', script '2.0' end score_mode 'total' end end end
For available options for these queries see:
# File lib/tire/search/query.rb, line 7 def initialize(&block) @value = {} block.arity < 1 ? self.instance_eval(&block) : block.call(self) if block_given? end
# File lib/tire/search/query.rb, line 89 def all(options = {}) @value = { :match_all => options } @value end
# File lib/tire/search/query.rb, line 61 def boolean(options={}, &block) @boolean ||= BooleanQuery.new(options) block.arity < 1 ? @boolean.instance_eval(&block) : block.call(@boolean) if block_given? @value[:bool] = @boolean.to_hash @value end
# File lib/tire/search/query.rb, line 100 def boosting(options={}, &block) @boosting ||= BoostingQuery.new(options) block.arity < 1 ? @boosting.instance_eval(&block) : block.call(@boosting) if block_given? @value[:boosting] = @boosting.to_hash @value end
# File lib/tire/search/query.rb, line 52 def constant_score(&block) @value.update( { :constant_score => ConstantScoreQuery.new(&block).to_hash } ) if block_given? end
# File lib/tire/search/queries/custom_filters_score.rb, line 49 def custom_filters_score(&block) @custom_filters_score = CustomFiltersScoreQuery.new block.arity < 1 ? @custom_filters_score.instance_eval(&block) : block.call(@custom_filters_score) if block_given? @value[:custom_filters_score] = @custom_filters_score.to_hash @value end
# File lib/tire/search/query.rb, line 45 def custom_score(options={}, &block) @custom_score ||= Query.new(&block) @value[:custom_score] = options @value[:custom_score].update({:query => @custom_score.to_hash}) @value end
# File lib/tire/search/query.rb, line 75 def dis_max(options={}, &block) @dis_max ||= DisMaxQuery.new(options) block.arity < 1 ? @dis_max.instance_eval(&block) : block.call(@dis_max) if block_given? @value[:dis_max] = @dis_max.to_hash @value end
# File lib/tire/search/query.rb, line 68 def filtered(&block) @filtered = FilteredQuery.new block.arity < 1 ? @filtered.instance_eval(&block) : block.call(@filtered) if block_given? @value[:filtered] = @filtered.to_hash @value end
# File lib/tire/search/query.rb, line 56 def fuzzy(field, value, options={}) query = { field => { :term => value }.update(options) } @value = { :fuzzy => query } end
# File lib/tire/search/query.rb, line 94 def ids(values, type=nil) @value = { :ids => { :values => Array(values) } } @value[:ids].update(:type => type) if type @value end
# File lib/tire/search/queries/match.rb, line 5 def match(field, value, options={}) if @value.empty? @value = MatchQuery.new(field, value, options).to_hash else MatchQuery.add(self, field, value, options) end @value end
# File lib/tire/search/query.rb, line 82 def nested(options={}, &block) @nested = NestedQuery.new(options) block.arity < 1 ? @nested.instance_eval(&block) : block.call(@nested) if block_given? @value[:nested] = @nested.to_hash @value end
# File lib/tire/search/query.rb, line 37 def prefix(field, value, options={}) if options[:boost] @value = { :prefix => { field => { :prefix => value, :boost => options[:boost] } } } else @value = { :prefix => { field => value } } end end
# File lib/tire/search/query.rb, line 27 def range(field, value) @value = { :range => { field => value } } end
# File lib/tire/search/query.rb, line 31 def string(value, options={}) @value = { :query_string => { :query => value } } @value[:query_string].update(options) @value end
# File lib/tire/search/query.rb, line 12 def term(field, value, options={}) query = if value.is_a?(Hash) { field => value.to_hash } else { field => { :term => value }.update(options) } end @value = { :term => query } end
# File lib/tire/search/query.rb, line 21 def terms(field, value, options={}) @value = { :terms => { field => value } } @value[:terms].update(options) @value end
# File lib/tire/search/query.rb, line 107 def to_hash @value end
# File lib/tire/search/query.rb, line 111 def to_json(options={}) to_hash.to_json end