Sha256: faead7546346d22bed7bc8f64e7ead1abb566df860560491653a56f38530a53e

Contents?: true

Size: 1.94 KB

Versions: 62

Compression:

Stored size: 1.94 KB

Contents

module Workarea
  module Admin
    class SearchAnalysisViewModel < ApplicationViewModel
      ScoredProduct = Struct.new(:product, :score, :featured) do
        delegate_missing_to :product
        alias_method :featured?, :featured
      end

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

      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

      def trace
        storefront_search.response.trace
      end

      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

      def last_used_customization
        trace.last.query.customization
      end

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

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
workarea-admin-3.5.27 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.5.26 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.4.45 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.5.25 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.5.23 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.4.44 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.5.22 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.4.43 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.5.21 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.4.42 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.5.20 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.4.41 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.5.19 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.4.40 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.5.18 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.4.39 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.5.17 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.4.38 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.5.16 app/view_models/workarea/admin/search_analysis_view_model.rb
workarea-admin-3.4.37 app/view_models/workarea/admin/search_analysis_view_model.rb