class Elasticsearch::Persistence::QueryBuilder
Attributes
structure[R]
values[R]
Public Class Methods
new(values)
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 7 def initialize(values) @values = values end
Public Instance Methods
aggregations()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 11 def aggregations values[:aggregation] end
count?()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 71 def count? values[:count] end
fields()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 39 def fields values[:field] end
filters()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 15 def filters values[:filter] end
highlights()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 47 def highlights values[:highlight] end
must_nots()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 31 def must_nots @must_nots ||= compact_where(values[:must_not]) end
or_filters()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 19 def or_filters values[:or_filter] end
query()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 23 def query @query ||= compact_where(values[:where]) end
query_filters()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 59 def query_filters values[:filter] end
query_string_options()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 67 def query_string_options @query_string_options || {} end
query_strings()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 27 def query_strings @query_string ||= compact_where(values[:query_string], bool: false) end
search_options()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 63 def search_options build_search_options end
shoulds()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 35 def shoulds @shoulds ||= compact_where(values[:should]) end
size()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 51 def size values[:size] end
sort()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 55 def sort values[:order] end
source()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 43 def source values[:source] end
to_elastic()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 75 def to_elastic @structure = Jbuilder.new ignore_nil: true build_query build_sort unless sort.blank? build_highlights unless highlights.blank? build_fields unless fields.blank? build_source unless source.blank? build_aggregations unless aggregations.blank? structure.attributes! end
Private Instance Methods
aggregation(name, opts = {})
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 256 def aggregation(name, opts = {}) Jbuilder.new do |agg| case when opts.is_a?(Hash) agg.extract! opts, *opts.keys when opts.is_a?(Array) extract_filter_arguments_from_array(agg, opts) else raise "#aggregation only accepts Hash or Array" end end end
as_must(q)
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 213 def as_must(q) _must = [] q.each do |arg| arg.each_pair { |k,v| _must << (v.is_a?(Array) ? {terms: Hash[k,v]} : {term: Hash[k,v]}) } if arg.class == Hash _must << {term: Hash[[arg.split(/:/).collect(&:strip)]]} if arg.class == String _must << arg.first if arg.class == Array end _must.length == 1 ? _must.first : _must end
as_query_string(q)
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 223 def as_query_string(q) _and = [] @query_string_options = q.pop if q.length > 1 q.each do |arg| arg.each_pair { |k,v| _and << "(#{k}:#{v})" } if arg.class == Hash _and << "(#{arg})" if arg.class == String end _and.join(" AND ") end
build_aggregations()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 179 def build_aggregations structure.aggregations do aggregations.each do |agg| structure.set! agg[:name], aggregation(agg[:name], agg[:args]) end end end
build_fields()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 187 def build_fields structure.fields do structure.array! fields.flatten end end
build_filtered_query()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 120 def build_filtered_query structure.filter do structure.or do or_filters.each do |f| structure.child! do structure.set! f[:name], extract_filters(f[:name], f[:args]) end end end unless or_filters.blank? structure.bool do structure.must do query_filters.each do |f| structure.child! do structure.set! f[:name], extract_filters(f[:name], f[:args]) end end end end unless query_filters.blank? end end
build_filters()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 167 def build_filters filters.each do |f| structure.filter extract_filters(f[:name], f[:args]) end end
build_highlights()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 157 def build_highlights structure.highlight do structure.fields do highlights.each do |highlight| structure.set! highlight, extract_highlighter(highlight) end end end end
build_or_filters()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 173 def build_or_filters or_filters.each do |f| structure.filter extract_filters(f[:name], f[:args]) end end
build_query()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 100 def build_query return if missing_bool_query? && missing_query_string? && missing_query_filter? structure.query do structure.bool do structure.must query unless missing_bool_query? structure.must_not must_nots unless must_nots.nil? structure.should shoulds unless shoulds.nil? build_filtered_query if query_filters || or_filters end unless missing_bool_query? && missing_query_filter? structure.query_string do structure.extract! query_string_options, *query_string_options.keys structure.query query_strings end unless query_strings.nil? end end
build_search_options()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 193 def build_search_options values[:search_option] ||= [] opts = extra_search_options (values[:search_option] + [opts]).compact.inject(Hash.new) { |h,k,v| h.merge(k) } end
build_sort()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 153 def build_sort structure.sort sort.flatten.inject(Hash.new) { |h,v| h.merge(v) } end
build_source()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 142 def build_source if [true,false].include? source.first structure._source source.first else structure._source do structure.include source.first.delete(:include) if source.first.has_key? :include structure.exclude source.first.delete(:exclude) if source.first.has_key? :exclude end end end
compact_where(q, opts = {bool:true})
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 204 def compact_where(q, opts = {bool:true}) return if q.nil? if opts.delete(:bool) as_must(q) else as_query_string(q.flatten) end end
extra_search_options()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 200 def extra_search_options [:size].inject(Hash.new) { |h,k| h[k] = self.send(k) unless self.send(k).nil?; h} end
extract_filter_arguments_from_array(element, opts)
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 269 def extract_filter_arguments_from_array(element, opts) opts.each do |opt| element.child! do element.extract! opt , *opt.keys end end end
extract_filters(name,opts = {})
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 243 def extract_filters(name,opts = {}) Jbuilder.new do |filter| case when opts.is_a?(Hash) filter.extract! opts, *opts.keys when opts.is_a?(Array) extract_filter_arguments_from_array(filter, opts) else raise "#filter only accepts Hash or Array" end end end
extract_highlighter(highlighter)
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 237 def extract_highlighter(highlighter) Jbuilder.new do |highlight| highlight.extract! highlighter end end
missing_bool_query?()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 88 def missing_bool_query? query.nil? && must_nots.nil? && shoulds.nil? end
missing_query_filter?()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 96 def missing_query_filter? query_filters.nil? && or_filters.nil? end
missing_query_string?()
click to toggle source
# File lib/elasticsearch/persistence/relation/query_builder.rb, line 92 def missing_query_string? query_strings.nil? end