Class: Trample::Backend::Searchkick

Inherits:
Object
  • Object
show all
Defined in:
lib/trample/backend/searchkick.rb

Instance Method Summary collapse

Constructor Details

#initialize(metadata, models) ⇒ Searchkick

Returns a new instance of Searchkick.



7
8
9
10
# File 'lib/trample/backend/searchkick.rb', line 7

def initialize(, models)
  @metadata = 
  @_models = models
end

Instance Method Details

#execute_search(query) ⇒ Object



42
43
44
45
# File 'lib/trample/backend/searchkick.rb', line 42

def execute_search(query)
  search_params = raw_search_params(query, scroll: @metadata.scroll)
  ::Searchkick.client.search(search_params)
end

#query!(conditions, aggregations) ⇒ Object



12
13
14
15
16
17
18
19
20
21
# File 'lib/trample/backend/searchkick.rb', line 12

def query!(conditions, aggregations)
  results = resume_or_execute(conditions, aggregations)

  {
    total:     results.total_count,
    took:      results.response['took'],
    results:   results.results,
    scroll_id: results.response['_scroll_id']
  }
end

#resume_or_execute(conditions, aggregations) ⇒ Object

There are 3 types of searches

  • A) Vanilla

  • B) Vanilla, but tell ES we are scrolling

  • C) A scroll search, using the scroll_id from B



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/trample/backend/searchkick.rb', line 28

def resume_or_execute(conditions, aggregations)
  payload = build_payload(conditions, aggregations, @metadata, @_models)
  query = ::Searchkick::Query.new(@_models.first, keywords(conditions), payload)

  response = if @metadata.scroll_id
    resume_search(@metadata.scroll_id)
  else
    execute_search(query)
  end
  results = query.handle_response(response)
  parse_response_aggs!(results.aggs, aggregations) if results.response.has_key?('aggregations')
  results
end