class Elastic::Core::QueryAssembler
Public Class Methods
new(_index, _config)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 3 def initialize(_index, _config) @index = _index @config = _config end
Public Instance Methods
assemble()
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 8 def assemble populated_query build_hit_query end
assemble_aggregated(_aggs)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 42 def assemble_aggregated(_aggs) query = build_base_query query.size = 0 last = attach_groups(query) last.aggregations = _aggs query = grouped_query(query) if grouped? query end
assemble_ids()
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 24 def assemble_ids pick_query_ids build_hit_query end
assemble_metric(_node)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 32 def assemble_metric(_node) query = assemble_aggregated([_node]) single_aggregation_query query end
assemble_metrics(_nodes)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 37 def assemble_metrics(_nodes) query = assemble_aggregated(_nodes) multiple_aggregation_query query end
assemble_pick(_field)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 28 def assemble_pick(_field) pick_query_fields build_hit_query, _field end
assemble_total()
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 12 def assemble_total query = build_base_query query.size = 0 if grouped? attach_groups(query) query = grouped_query query end pick_query_totals query end
Private Instance Methods
attach_groups(_query)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 89 def attach_groups(_query) @config.groups.inject(_query) do |last, node| node = node.simplify last.aggregate node node end end
build_base_query()
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 55 def build_base_query Elastic::Nodes::Search.build @config.query.simplify end
build_hit_query()
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 59 def build_hit_query query = build_base_query if !grouped? query.size = (@config.limit || Elastic.config.page_size) query.offset = @config.offset query = sort_node(query) else query.size = 0 last = attach_groups query last.aggregate sort_node Elastic::Nodes::TopHits.build('default') query = grouped_query query query = single_aggregation_query query end query end
grouped?()
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 85 def grouped? !@config.groups.empty? end
grouped_query(_query)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 97 def grouped_query(_query) Elastic::Shims::Grouping.new(_query) end
multiple_aggregation_query(_query)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 105 def multiple_aggregation_query(_query) Elastic::Shims::MultipleAggregation.new(_query) end
pick_query_fields(_query, _field)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 117 def pick_query_fields(_query, _field) Elastic::Shims::FieldPicking.new(_query, _field.to_s) end
pick_query_ids(_query)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 113 def pick_query_ids(_query) Elastic::Shims::IdPicking.new(_query) end
pick_query_totals(_query)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 121 def pick_query_totals(_query) Elastic::Shims::TotalPicking.new(_query) end
populated_query(_query)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 109 def populated_query(_query) Elastic::Shims::Populating.new(@index, @config, _query) end
single_aggregation_query(_query)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 101 def single_aggregation_query(_query) Elastic::Shims::SingleAggregation.new(_query) end
sort_node(_node)
click to toggle source
# File lib/elastic/core/query_assembler.rb, line 78 def sort_node(_node) return _node unless @config.sort sort_node = @config.sort.clone sort_node.child = _node sort_node end