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_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_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