Class: Workarea::Admin::SearchAnalysisViewModel

Inherits:
ApplicationViewModel
  • Object
show all
Defined in:
app/view_models/workarea/admin/search_analysis_view_model.rb

Defined Under Namespace

Classes: ScoredProduct

Instance Method Summary collapse

Instance Method Details

#last_used_customizationObject



46
47
48
# File 'app/view_models/workarea/admin/search_analysis_view_model.rb', line 46

def last_used_customization
  trace.last.query.customization
end

#middlewareObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/view_models/workarea/admin/search_analysis_view_model.rb', line 27

def middleware
  @middleware ||= begin
    past_last = false

    storefront_search.create_middleware_chain.reduce({}) do |memo, middleware|
      status = if past_last
        :ignore
      elsif middleware.is_a?(storefront_search.used_middleware.last.class)
        :last
      else
        :pass
      end

      past_last = middleware.is_a?(storefront_search.used_middleware.last.class) unless past_last
      memo.merge(middleware.class => status)
    end
  end
end

#scoresObject



13
14
15
16
17
18
19
20
21
# File 'app/view_models/workarea/admin/search_analysis_view_model.rb', line 13

def scores
  @scores ||= storefront_search.response.query.results.map do |result|
    ScoredProduct.new(
      ProductViewModel.wrap(result[:model]),
      result[:raw]['_score'],
      last_used_customization.featured_product?(result[:model].id)
    )
  end
end

#storefront_searchObject



9
10
11
# File 'app/view_models/workarea/admin/search_analysis_view_model.rb', line 9

def storefront_search
  @storefront_search ||= Search::StorefrontSearch.new(q: model.query)
end

#tokensObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/view_models/workarea/admin/search_analysis_view_model.rb', line 50

def tokens
  @tokens ||= begin
    terms_used = trace.last.query.query_string.sanitized

    options = Workarea
      .config
      .elasticsearch_settings
      .dig(:analysis, :analyzer, :text_analyzer)
      .except(:char_filter)
      .merge(index: Search::Storefront.current_index.name, text: terms_used)

    Workarea.elasticsearch.indices.analyze(options)['tokens'].reduce({}) do |memo, result|
      memo.merge(result['token'] => result['type'].gsub(/\W/, ''))
    end
  end
end

#traceObject



23
24
25
# File 'app/view_models/workarea/admin/search_analysis_view_model.rb', line 23

def trace
  storefront_search.response.trace
end