class Fracas::Dataset

Attributes

client[R]
query[R]
results[R]

Public Class Methods

new(url) click to toggle source
# File lib/fracas/dataset.rb, line 7
def initialize(url)
  @query = {
    indices: [],
    types:   [],
    filters: []
  }

  @client = Elasticsearch::Client.new(url: url)
end

Public Instance Methods

all() click to toggle source
# File lib/fracas/dataset.rb, line 35
def all
  with_loaded_results { |ds| ds.results['hits']['hits'].map { |hit| hit['_source'] } }
end
count() click to toggle source
# File lib/fracas/dataset.rb, line 39
def count
  with_loaded_results { |ds| ds.results['hits']['total'] }
end
each(&block) click to toggle source
# File lib/fracas/dataset.rb, line 31
def each(&block)
  with_loaded_results { |ds| ds.all.each(&block) }
end
filter(condition = {}) click to toggle source
# File lib/fracas/dataset.rb, line 43
def filter(condition = {})
  merge filters: condition
end
from_index(*indices)
Alias for: from_indices
from_indices(*indices) click to toggle source
# File lib/fracas/dataset.rb, line 21
def from_indices(*indices)
  merge(indices: indices)
end
Also aliased as: from_index
from_type(*types)
Alias for: from_types
from_types(*types) click to toggle source
# File lib/fracas/dataset.rb, line 26
def from_types(*types)
  merge(types: types)
end
Also aliased as: from_type
load() click to toggle source
# File lib/fracas/dataset.rb, line 72
def load
  clone.tap(&:load!)
end
load!() click to toggle source
# File lib/fracas/dataset.rb, line 76
def load!
  @results = @client.search(to_query)
end
merge(query) click to toggle source
# File lib/fracas/dataset.rb, line 58
def merge(query)
  clone.tap { |clone| clone.merge!(query) }
end
merge!(query) click to toggle source
# File lib/fracas/dataset.rb, line 62
def merge!(query)
  @query = @query.merge(query) do |key, oldval, newval|
    case key
    when :indices, :types then oldval + newval
    when :filters         then oldval + [newval]
    else raise "Unrecognized key! #{key.inspect}"
    end
  end
end
refresh() click to toggle source
# File lib/fracas/dataset.rb, line 17
def refresh
  @client.indices.refresh index: indices
end
to_query() click to toggle source
# File lib/fracas/dataset.rb, line 47
def to_query
  query = {
    index: indices,
    type: types,
    body: {
      query: queries,
      filter: filters
    }
  }
end

Private Instance Methods

filters() click to toggle source
# File lib/fracas/dataset.rb, line 102
def filters
  filters = @query[:filters]
  if filters.count.zero?
    {
      match_all: {}
    }
  else
    {
      and: filters.map { |w|
        {
          term: w
        }
      }
    }
  end
end
indices() click to toggle source
# File lib/fracas/dataset.rb, line 86
def indices
  indices = @query[:indices]
  indices.count.zero? ? '_all' : indices.join(',')
end
queries() click to toggle source
# File lib/fracas/dataset.rb, line 96
def queries
  {
    match_all: {}
  }
end
types() click to toggle source
# File lib/fracas/dataset.rb, line 91
def types
  types = @query[:types]
  types.join(',') unless types.count.zero?
end
with_loaded_results() { |results ? self : load| ... } click to toggle source
# File lib/fracas/dataset.rb, line 82
def with_loaded_results
  yield results ? self : load
end