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