Sha256: 73b199703f3661dac0ad27c5ce5b27a73567dc73d117df685a791061b3b4acfa

Contents?: true

Size: 1.81 KB

Versions: 2

Compression:

Stored size: 1.81 KB

Contents

module Sunspot
  module Query
    #
    # A query component that builds parameters for requesting highlights
    #
    class Highlighting #:nodoc:
      def initialize(fields=[], options={})
        @fields  = fields
        @options = options
      end

      #
      # Return Solr highlighting params
      #
      def to_params
        params = {
          :hl => 'on',
          :"hl.simple.pre" => '@@@hl@@@',
          :"hl.simple.post" => '@@@endhl@@@'
        }
        unless @fields.empty?
          params[:"hl.fl"] = @fields.map { |field| field.indexed_name }
        end
        if max_snippets = @options[:max_snippets]
          params.merge!(make_params('snippets', max_snippets))
        end
        if fragment_size = @options[:fragment_size]
          params.merge!(make_params('fragsize', fragment_size))
        end
        if @options[:merge_contiguous_fragments]
          params.merge!(make_params('mergeContiguous', 'true'))
        end
        if @options[:phrase_highlighter]
          params.merge!(make_params('usePhraseHighlighter', 'true'))
          if @options[:require_field_match]
            params.merge!(make_params('requireFieldMatch', 'true'))
          end
        end

        advanced_fields = {
          :alternate_field => 'alternateField',
          :formatter       => 'formatter',
          :fragmenter      => 'fragmenter'
        }
        advanced_fields.each do |k,v|
          if val = @options[k]
            params.merge!(make_params(v, val))
          end
        end

        params
      end

      private

      def make_params(name, value)
        if @fields.empty?
          { :"hl.#{name}" => value }
        else
          @fields.inject({}) do |hash, field|
            hash.merge!(:"f.#{field.indexed_name}.hl.#{name}" => value)
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lisausa-sunspot-1.2.1.1 lib/sunspot/query/highlighting.rb
lisausa-sunspot-1.2.1 lib/sunspot/query/highlighting.rb